字符数组的输入输出有两种方法:
(1)逐个字符输入输出。用格式符“%c”输入或输出一个字符。例如
int main(){char c[6]; //定义一个字符串for (int i = 0; i < 5; i++){scanf("%c", &c[i]); //输入字符串}for (int i = 0; i < 5; i++){printf("%c", c[i]); //输出字符串}return 0;}
(2)将整个字符串一次输入或输出。用“%s”格式符,意思是对字符串(string)的输入输出。例如
int main(){ //char str[]={"China"};char str[6];scanf("%s", str);printf("%s", str);return 0;}
在内存中数组的存储情况为:
输出时遇到’\0’,就停止输出。
说明:
(1)输出的字符中不包含结束符’\0’。
(2)用“%s”格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名。
(3)如果数组长度大于字符串实际长度,也只输出到遇到’\0’结束。例如
char c[10]={"China"}; //字符串长度为5,连'\0'一共占6个字节printf("%s",c);
只输出字符串的有效字符”China”,而不是输出10个字符。这就是用字符串结束标志的好处。
(4)如果一个字符数组中包含一个以上’\0’,则遇到第一个’\0’时就结束。例如
int main(){char str[10] = {"China\0boy"};printf("%s", str);return 0;}
(5)可以用scanf函数输入一个字符串。scanf("%s",c);
scanf函数中的输入项c是已定义的字符数组名,输入的字符串应该短于已定义的字符数组的长度。例如
已定义char c[6];
从键盘输入 China
系统会自动在China后面加一个’\0’结束符。如果利用一个scanf函数输入多个字符串,则应该在输入时以空格分隔。例如
char str1[5],str2[5],str3[5];scanf("%s%s%s",str1,str2,str3);
输入数据:How are you” />
数组中没有被赋值的元素的值自动置’\0’。若改为
char str[13];scanf("%s",str);
如果输入How are you?
由于系统把空格符作为输入的字符串之间的分隔符,因此只将空格前的字符”How”送到str中。把”How”作为一个字符串处理,故在其后加’\0’。str的数组状态为
注意:scanf函数中的输入项如果是字符数组名,不要再加上地址符&,因为在C语言中数组名代表该数组的第一个元素的地址(或者说数组的起始地址)。
以下图为例:这个图所表示的是一个字符数组,若数组占6个字节。数组名c代表地址2000。
可以用这个printf("%o",c); //八进制形式输出
输出语句得到数组第一个元素的地址,也就是数组的起始地址。
(6)前面提到的输出字符串的方法:printf("%s",c);
实际上是这样执行的:按字符数组名c找到其数组第一个元素的地址,然后逐个输出其中的字符,直到遇到’\0’为止。