【发布时间】:2021-04-26 23:27:18
【问题描述】:
下面的代码有效,但我将一个空字符串分配给一个 char 数组。
#include <stdio.h>
int main() {
char a[ ]= "";
gets(a);
printf("You entered: %s", a);
return 0;
}
然后gets(a),用用户输入的任何内容填充它,不管字符串有多长,但如果没有给出大小。我是否有覆盖内存中内容的风险?当谈到 C 时,我是一个新手,我担心我正在用这段代码做一些无懈可击的事情,因为 gets() 函数的所有文档都使用具有预定义长度的字符串,例如 char a[10 ]。
【问题讨论】:
-
您不能将
gets()放入零长度缓冲区。也不要使用gets()。至少使用fgets()。 -
值得注意的是,您在此处使用的
gets的特殊风格被认为足够危险,已从 C11 中的 C 和 C++ 中的 C++ 中删除 14. -
你不能拥有一个长度为零的数组,至少在不使用语言扩展的情况下是这样。您的示例没有这样做,并且它不包含零长度数组(如声明的那样,数组
a的长度为 1,根据需要容纳“空”字符串的终止符)。 -
char a[] = ""确实有预定义的长度,该长度是1