字符型数据是以ASCII代码存储在存储单元中的,一般占用一个字节。由于ASCII属于整数形式,所以在C99标准中,把字符类型归纳为整型类型的一种:
int c[10];
c[0]='a'; //赋值
char c[10]={'I',' ','a','m'}; //预定义好大小
char c[]={'I',' ','a','m'}; //自动开辟空间
c语言中,是将字符串当作字符数据来处理的。’\0’代表ASCII为0的字符,ASCII为0的字符不是一个可以显示的字符,而是一个空操作符。故用它来做字符串结束标志。其不会产生附加的操作或增加有效字符,只是一个供辨别的标志。
//用字符串常量来使字符数组初始化
char c[]={"I am happy"};
//可写为
char c[]="I am happy";
//等价为:
char c[]={'I','','a','m','','h','a','p','p','y','\0'};
//上面两个数组长度均为11,下面句子与上面不等价,且数组长度为10
char c[]={'I','','a','m','','h','a','p','p','y'};
//输出数组c中的字符串
printf("%s\n",c);
printf遇到’0’停止输出。
c语言中,字符串数组的输入输出可以有两种方式。
1.逐个字符输入输出。用格式符”%c”输入或输出 一个字符。
for(int i=0;i<6;i++)
printf("%c",c[i]);
2.将整个字符串一次输入或输出。用”%s”格式符。如:
char c[ ]={"China"};
printf("%s\n",c);
注意事项:
1.输出字符中,不包括结束符‘\0’;
2.用“%s”格式符输出字符串时,printf语句中的输出项时字符数组名,而不是数组元素名,如下是不对的:printf(“%s”,c[0]);
3.如果一个字符数组中包含一个以上’\0’,则,遇到第一个’\0’就停止输出
4.输入一个字符串:scanf(”%s”,c);
scanf中输入项c是已经定义的字符数组名,输入的字符串应该短于已定于的字符数组长度。
5.利用scanf输入多个字符串时,应该在输入时以空格分隔。
char str1[5],str2[5],str3[5];
scanf("%s%s%s",str1,str2,str3);
c函数库提供的专门处理字符串的函数:
1.puts(字符数组)
puts(str);
eg:
char str[]={"China\nBeiJing"};
puts(char);
输出为:
China
BeiJing
2.gets(字符数组)
eg:
gets(str);
从键盘输入:
Computer回车
将输入的字符Computer给了str
注意
用puts或gets函数只能一次输出或输入一个字符串。
3.strcat(字符数组1,字符数组2)
连接函数:把字符串2连接到字符串1后面,结果放到字符数组1中,
函数调用后得到一个函数值——字符数组1的地址。
4.strcpy(字符数组1,字符串2)
将字符串2复制到字符数组1中。
char str1[10],str2[]="China";
strcpy(str1,str2);
//结果:str1状态:China\0\0\0\0\0
可以用strncpy函数将字符串2中前面n个字符复制到字符数组1中。
strncpy(字符数组1,字符串2,n)