————来源《C语言程序设计》苏小红
10.1字符串字面量(string literal)
也称为字符串常量
字符串末尾添加一个'\0'作为字符串结束的标志
'\0'的ASC码值为0.
10.2字符串存储
C语言没有字符串数据类型,需要字符型数组来实现字符串存储。
是否有结束标志'\0'作为字符串结束的标志,是字符数组与字符串的区别。
初始化方法一:需要注意声明数组的长度比实际字符串长度要大1,因为必须添加字符串结束标志'\0'。
char str[6] = {'H','e','l','l','o','\0'};
初始化方法二:不必指定数组大小,编译徐彤自动在字符串末尾添加'\0'。
char str[] = {"Hello"};
char str[] = "Hello”;
二维字符数组:
数组第一维表示字符串的个数,数组第二位表示字符串的长度。
第一维可以省略,因为二维数组是按行存储。
10.3字符指针
1.字符指针指向字符串的首地址
char *ptr = "Hello";
字符串字面量"Hello"在常量存储区中,是只读的,所以可以改变ptr的指向,但是不能对ptr指向的存储单元进行读写。
2.字符指向字符数组
char str[10] = "Hello";
char *ptr = str;
此时数组名代表数组的首地址,数组名是一个地址常量不能修改。
而ptr所指向的字符串可以修改。
10.4字符串的访问和输入输出
1.访问字符串中的单个字符
(1)用字符数组下标即可访问字符串中的单个字符。
(2)用字符指针间接访问
*(ptr+i) //字符串中第i个字符
2.字符串的输入、输出
(1)按c格式符,即按字符输入、输出
for(int i=0; str[i]!='/0';i++){
printf("%c",str[i]);
}
(2)按s格式符
char name[N];
scanf("%s",name);
注意:scanf函数读入字符遇到【空白字符】时,就结束了读入字符的操作,余下的字符依然留在输入缓冲区中。
【空白字符】包括:空格,制表符,回车。
(3)gets()可以输入带空格的字符串,即将空格和制表符都看作字符串的一部分。
注意:scanf()和gets()对于回车符的处理不同————get()将回车符作为字符串的终止符,同时将回车符从缓冲区读走;而scanf()则不读走回车符,还将回车符留在缓冲区中。
(4)fgets()限制输入字符串长度,防止缓冲区溢出。
fgets(name,sizeof(name),stdin);