c语言的简单问题.

来源:百度知道 编辑:UC知道 时间:2024/09/21 22:14:50
#include "stdio.h"
main()
{
int i;
char fruit[2][16];
for(i=0;i<2;i++)
gets(fruit[i]);
for(i=0;i<2;i++)
printf("%s ",fruit[i]);
putchar('\n');
}
有什么问题?运行结果不正确.有时数组fruit[1][]打两次,怎么回事?例如:
输入:This is a chair!
This is a pen!
结果为:
This is a chair! This is a pen!This is a pen!
press any key to continue.

fruit声明长度不够
fruit包含2个字符串,每个最大长度为15(因为还有'\0')
"This is a chair!"正好是16个字符,那么事实上这个字符串的结束符'\0'被存到了fruit[1][0]里面了,当读入第二个字符串的时候就会把这个'\0'覆盖了,那么打印第一个字符串时就不会遇到'\0'结束,而是一直打印,直到遇到第二个字符串的'\0'结束符.

PS:如果"This is a chair!"后面还有其他字符,比如字符串是"This is a chair!123",那么打印的时候123就不会被打印出来,因为也被后面的覆盖了

你的程序我没有调试,不过我想是这样的.fruit给出的是一个地址,那么第一次打印的时候,只是说明从fruit[0]这个地址开始输出,所以就输出了This is a chair! This is a pen!,第二次从fruit[1]这个地址开始,就是This is a pen!希望你上机调试一下,看看是不是这么回事.