我正在编写一个 C 程序,它有一个 5 元素数组来存储一个字符串。我正在使用 gets()
获取输入。当我输入超过 5 个字符然后输出字符串时,它只给了我输入的所有字符。我知道字符串以 \0
结尾,所以即使我超出了我的数组,它仍然会输出整个东西。
但我很好奇的是,gets()
到底在哪里存储输入,是缓冲还是直接进入我的数组?
如果我输入一个很长的字符串,gets()
会尝试将字符存储在不应该被触摸的内存中吗?它会给我一个段错误吗?
最佳答案
这就是为什么 gets
是一个邪恶。它不检查数组绑定(bind)并经常调用未定义的行为。切勿使用 gets
,而是可以使用 fgets
.
顺便说一句,现在 gets
不再是 C 的一部分。它已在 C11 标准中删除,取而代之的是新的安全替代方案,gets_s
1(参见 wiki)。所以,最好忘记 gets
。
<子>1。 C11: K.3.5.4.1 gets_s
函数
概要
#define _ _STDC_WANT_LIB_EXT1_ _ 1
#include <stdio.h>
char *gets_s(char *s, rsize_t n);
关于c - 关于 C 中的 gets(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21068526/