我正在学习C,这是我的第一门编程语言。我不了解称为“缓冲区溢出”的错误。我的代码如下:
#include <stdio.h>
int main()
{
char a[5];
gets(a);
printf ("%s",a);
return 0;
}
现在,当我输入五个以上的单词时,它应该以五个结尾,不是吗?但是它显示了一些缓冲区错误,我不知道该怎么办。请帮我解决一下这个。
a[5]
的字数限制不是5吗?
我很困惑。 抱歉,如果您不满意,请先谢谢。
答案 0 :(得分:0)
实际上,限制为4个字符,因为会将空终止符添加到末尾以形成有效的字符串。这意味着如果您需要5个字符的空间,则需要char a[6]
。
同样,出于这个确切原因,不应使用gets
。相反,我会使用scanf
:
scanf("%5s", a);
这将告诉它最多读取5个字符,即使还有更多字符。
有了这些更改,程序应如下所示:
#include <stdio.h>
int main()
{
char a[6];
scanf("%5s", a);
printf ("%s",a);
return 0;
}
也可以改用fgets
:
fgets(a, 5, stdin);