当我尝试通过 GCC 编译使用 gets()
函数的 C 代码时,我收到以下警告:
(.text+0x34): warning: the `gets' function is dangerous and should not be used.
我记得这与堆栈保护和安全有关,但我不确定具体原因。
我怎样才能删除这个警告?为什么会有关于使用 gets()
的警告?
如果 gets()
如此危险,那我们为什么不能删除它呢?
最佳答案
为了安全地使用 gets
,您必须确切知道要读取多少个字符,这样才能使缓冲区足够大。只有确切知道要读取哪些数据,您才会知道这一点。
您想使用 fgets
而不是使用 gets
, 有签名
char* fgets(char *string, int length, FILE * stream);
(fgets
,如果它读取整行,会将 '\n'
留在字符串中;你必须处理它。)
gets
直到 1999 年 ISO C 标准仍然是该语言的官方部分,但在 2011 standard 中被正式删除。 .大多数 C 实现仍然支持它,但至少 gcc 会针对任何使用它的代码发出警告。
关于c - 为什么gets函数如此危险以至于不应该使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4309746/