Spa*_*row 0 c arrays printf char
我有一个简单的程序来输入一个包含5个字符串的数组并输出它们.但输出有些奇怪.以下是我的代码.
#include <stdio.h>
int main()
{
char a[10][5];
int i;
for(i=0; i<5; ++i)
{
printf("\nEnter the name of %d st student:", i+1);
fflush(stdout);
gets(a[i]);
}
for(i=0; i<5; ++i)
{
printf("\n%s", a[i]);
fflush(stdout);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我把输入作为tom,john,peter,david和alan给出了以下输出.
tom
john
peterdavidalan
davidalan
alan
Run Code Online (Sandbox Code Playgroud)
可能是什么问题呢?
C数组语法让IMO很混乱 - 它意味着我通常阅读它的方式相反......而且看起来你也犯了这个错误.
你的数组有十个字符串,每个字符串4个字符(它不是5个,因为C中的每个字符串必须以0字符结尾).因此,当您输入时peter,它不会舒适地适应10个字符缓冲区,而是溢出5个字符缓冲区,从而节省了之前保存的一个字符.
如果没有0终结符,printf将继续运行,因此也会编写其他名称.