在C中打印字符串数组时出错

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)

可能是什么问题呢?

Ada*_*ppe 7

C数组语法让IMO很混乱 - 它意味着我通常阅读它的方式相反......而且看起来你也犯了这个错误.

你的数组有十个字符串,每个字符串4个字符(它不是5个,因为C中的每个字符串必须以0字符结尾).因此,当您输入时peter,它不会舒适地适应10个字符缓冲区,而是溢出5个字符缓冲区,从而节省了之前保存的一个字符.

如果没有0终结符,printf将继续运行,因此也会编写其他名称.