我不了解称为“缓冲区溢出”的错误

时间:2018-10-12 10:11:50

标签: c

我正在学习C,这是我的第一门编程语言。我不了解称为“缓冲区溢出”的错误。我的代码如下:

#include <stdio.h>
int main()
{
char a[5];
gets(a);
printf ("%s",a);
return 0;
}

现在,当我输入五个以上的单词时,它应该以五个结尾,不是吗?但是它显示了一些缓冲区错误,我不知道该怎么办。请帮我解决一下这个。 a[5]的字数限制不是5吗?

我很困惑。 抱歉,如果您不满意,请先谢谢。

1 个答案:

答案 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);