字符数组的输入输出有两种方法:
(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;
}

在内存中数组的存储情况为:

输入一个字符串输出要取得子串python 输入一个字符串再输出_字符串


输出时遇到’\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;
}

输入一个字符串输出要取得子串python 输入一个字符串再输出_数组_02


(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?

由于空格字符分隔,作为三个字符串输入。在输入完后,str1,str2,str3数组的状态如下:

输入一个字符串输出要取得子串python 输入一个字符串再输出_数据结构_03


数组中没有被赋值的元素的值自动置’\0’。若改为

char str[13];
scanf("%s",str);

如果输入How are you?

由于系统把空格符作为输入的字符串之间的分隔符,因此只将空格前的字符"How"送到str中。把"How"作为一个字符串处理,故在其后加’\0’。str的数组状态为

输入一个字符串输出要取得子串python 输入一个字符串再输出_数组_04


注意:scanf函数中的输入项如果是字符数组名,不要再加上地址符&,因为在C语言中数组名代表该数组的第一个元素的地址(或者说数组的起始地址)

以下图为例:这个图所表示的是一个字符数组,若数组占6个字节。数组名c代表地址2000。

可以用这个printf("%o",c); //八进制形式输出输出语句得到数组第一个元素的地址,也就是数组的起始地址。

输入一个字符串输出要取得子串python 输入一个字符串再输出_数组_05


(6)前面提到的输出字符串的方法:printf("%s",c); 实际上是这样执行的:按字符数组名c找到其数组第一个元素的地址,然后逐个输出其中的字符,直到遇到’\0’为止。