字符串
1、字符串(String):串字符,即若干个字符构成的一个序列
Ø C语言中没有字符串类型,只能用字符数组表示字符串,为了方便对字符串的处理,C语言提供了很多简化写法
Ø C语言规定,一个合法的字符串的最后一个字符必须为'\0',即'\0'为字符串结束标志
2、字符数组:数组中元素的是字符类型
1)逐个赋值:注意手动加’\0’
char ch[6];
ch[0]=’H’;
ch[1]=’e’;
ch[2]=’l’;
ch[3]=’l’;
ch[4]=’o’;
ch[5]=’\0’;
(2)用字符串常量赋值
char ch[6]={"Hello"};
char ch[6]="Hello";
char ch[]="Hello";
3、输出方式:
(1)输出逐个字符 %c
(2)输出整个字符串 %s //注意关注有没有’\0’
4、sizeof和strlen的区别
Ø sixeof是运算符,strlen是函数
Ø 对于charch[]="Hello";
sizeof(ch)为6 算’\0’//sizeof是求空间的大小
s trlen(ch)为5 不算’\0’
4.与字符串处理相关的函数
#include<string.h>
strcpy(字符串拷贝)
strncpy(字符串拷贝,可以指定要拷贝的字节数)
strcat(字符串连接)
strlen(求字符串长度,不包括'\0')
strcmp(比较两个字符串的大小,按字典顺序,大小写敏感), strncmp(比较两个字符串开头的部分的大小,大小写敏感)等
注意:
strcpy,strncpy,strcat这些函数很危险,它们不会检查越界访问(只认‘\0’),这个工作由调用者负责,一要保证目标缓冲区(Buffer)大小充足
缓冲区(Buffer):一块内存空间。
在执行标准输入(比如调用scanf或getchar)时,我们键入的字符在我们按下回车键后会进入标准输入缓冲区中,scanf这些函数只是从这个缓冲区中取走相应类型的数据,如果调用函数时这个缓冲区中没有任何数据,这些函数会等待用户按键输入;如果缓冲区中有数据,但不是scanf函数所期望类型的数据,那么scanf函数就会立即失败返回,否则会直接取走相应的数据,不会等待
Linux系统下清除缓冲区
scanf("%c")
在数据输入时,如果输入有误,往往需要清空缓冲区,以保证下次输入的准确可靠。
在Linux系统中,有时会惯性思维,使用在Windows程序设计中常用的方法:
(1)fflush(stdin):
fflush()函数,不是标准c库中的,只是标准c的扩展,所以在Linux中,不行。
(2)rewind(stdin):
这个函数是将指针指向流的开始位置,但它是文件io中的一个函数,操作的是FILE型流。在Linux中不行。
(3)getchar(): //getchar()一个一个处理丢掉
while(getchar()!='\n')
;
通过读取stdin中的剩余数据并丢弃,来清空缓冲区。getchar()一次读一个字符,在Linux中,可行!
(4)setbuf(stdin,NULL):
通过调用函数,直接将缓冲区清空(置空或指空)。在Linux中可行!(一次性)
(5)fgets():
charzmx[1024];
fgets(s,1024,stdin);
在linux 中,可行的方案,只有(3)、(4)、(5)
执行可执行文件时可跟参数