在C语言中,没有专门的类型去储存字符串类型的数据,C语言是通过字符数组来保存字符串数据的。 将字符串数据的每1个字符存储到字符数组中,并在后面追加1个'\0'代表字符串存储完毕.
1.如何储存字符串
a. 最根本的方式.
char name[5] = {'j','a','c','k','\0'};
将字符串的每一个字符存储到字符数组中,在后面追加1个'\0'代表存储结束.
char name[] = {'j','a','c','k','\0'};
b. 简写的方式.
char name[] = {"jack"};
系统自动的会将这个字符串中的每一个字符存储到字符数组中,并自动追加1个'\0'.
c. 最常用的方式.
char name[] = "jack";
系统自动的会将这个字符串中的每一个字符存储到字符数组中,并自动追加1个'\0'.
2.常用函数
printf函数
使用printf函数输出存储在字符数组中的字符串数据.使用格式控制符%s 就可以输出存储在字符数组中的字符串数据.从给定的数组的地址开始 1个字节1个字节的输出,直到 遇到'\0'为止.
使用scanf函数接收用户输入的字符数据
1). 先准备1个字符数组来保存用户输入的字符串数据.
char str[10];
2). 使用scanf函数接收用户输入字符串数据并存储到指定的字符数组中.
scanf("%s",str);
注意:
1). 如果输入的字符串数据在给定的字符数组中存储不下的时候,就会运行报错
2). 用户在输入字符串的时候,如果输入了空格,就会认为输入结束.
使用以上两种函数有很多的不足,所以常用的是以下函数
1. puts()函数.
作用:用来输出字符串的.
语法格式: puts(存储字符串的字符数组名);
优点:输出完毕之后,自动换行.
缺点:只能输出字符串.也不能使用占位符.
2. gets()函数
作用: 从控制台接收用户输入1个字符串数据.
语法格式: gets(存储字符串的字符数组名);
优点: 当用户输入的数据包含空格的时候 它会连空格一起接收.
缺点:和scanf函数一样 不安全.
当用来存储字符串的数据的字符数组的长度不够的时候 程序就会崩溃.
------下面四个函数 是声明在string.h这个头文件中------
3. strlen();函数
作用: 得到存储在字符数组中字符串数据的长度.
语法格式: strlen(字符串);
4. strcmp()函数.
cmp --> compare 比较.
作用: 用来比较两个字符串的大小的.
语法格式:
strcmp(字符串1,字符串2);
返回值是int类型的.
如果返回的是负数.就说明字符串1比字符串2小.
如果返回的是正数 就说明字符串1比字符串2大.
如果返回的是0 就说明一样.
比较的规则:比的是相同位置的字符的ASCII码的大小.
5. strcpy()函数 copy
作用: 把存储在1个字符数组中的字符串数据拷贝到另外1个字符数组中存储.
格式:
strcpy(字符串1,字符串2);
将字符串2拷贝到字符串1数组中.
可能的问题.
存储字符串1的字符数组长度不够,无法存储字符串2 这个时候运行就会崩溃.
6. strcat()函数. concat: 连接.
语法格式:
strcat(字符数组1,字符数组2);
作用: 把存储在字符数组2的字符串数据链接在字符串1的后面.
将两个字符串合成1个字符串.
存在的问题:
如果字符数组1中无法存储下字符数组2的字符串数据,运行就会报错.
使用注意.
1). 如果我们使用字符数组存储字符串数据的时候,没有指定这个字符数组的长度.
那么这个时候,这个字符数组的长度 字符串的长度 + 1
2). 如果我们使用字符数组存储字符串数据的时候,指定了这个字符数组的长度.
那么这个字符数组的长度就是我们指定的长度.
3). 如果指定的字符数组的长度小于等于了字符串的长度,这个时候就会有问题了.
就会出现存储不下的情况.
4). 所以,我们在使用字符数组存储字符串数据的时候,最好就不要指定长度了,让让知己算 这样刚合适.
5). 如果在声明1个字符数组的同时我们就初始化1个字符数据给这个数组,
那么这个时候是可以用中文.
1个中文占据3个字符.