C 我不理解这个叫做“缓冲区溢出”的错误

C 我不理解这个叫做“缓冲区溢出”的错误,c,C,我正在学习C语言,这是我的第一门编程语言。我不理解这个叫做缓冲区溢出的错误。我的代码如下: #include <stdio.h> int main() { char a[5]; gets(a); printf ("%s",a); return 0; } 现在当我输入超过5个单词时,应该以5个结尾,不是吗?但它显示了一些缓冲区错误,我不知道该怎么办。请帮我做这个。 那不是一个[5]字吗 我很困惑。 抱歉,如果它分发给大家,请提前感谢。实际上,限制是4个字符,因为将在结尾添加一个空终止

我正在学习C语言,这是我的第一门编程语言。我不理解这个叫做缓冲区溢出的错误。我的代码如下:

#include <stdio.h>
int main()
{
char a[5];
gets(a);
printf ("%s",a);
return 0;
}
现在当我输入超过5个单词时,应该以5个结尾,不是吗?但它显示了一些缓冲区错误,我不知道该怎么办。请帮我做这个。 那不是一个[5]字吗

我很困惑。
抱歉,如果它分发给大家,请提前感谢。

实际上,限制是4个字符,因为将在结尾添加一个空终止符以形成有效字符串。这意味着,如果需要5个字符的空间,则需要字符a[6]

另外,GET不应该用于这个确切的原因。相反,我会使用scanf:

这将告诉它最多读取5个字符,即使还有更多字符

通过这些更改,程序应如下所示:

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

超过5个单词-单词??如果键入的字符超过四个,包括换行符so三个字符和键盘enter键,则溢出。不要使用gets,它是邪恶的,非常危险的,七年前就从标准图书馆中删除了。使用大写字母被认为是叫喊。请不要这样做。获取输入中的任何内容。它不限制缓冲区的大小。您应该知道,所有大写文本都是粗体的。谢谢。现在我明白了,我会像你看到我一样做。但有一个问题??这个get函数危险吗?每个人都对这个函数说不???没问题!是的,它确实很危险,不应该再使用了。scanf可以做同样的事情,但是更安全。为什么不使用fgets呢?酷,我不知道。将其添加到答案中。谢谢现在这是什么FGETS???很难得到这个到scanf,我听到这个FGETS和puts?????它简单有效,无需缓冲
#include <stdio.h>
int main()
{
    char a[6];
    scanf("%5s", a);
    printf ("%s",a);
    return 0;
}
fgets(a, 5, stdin);