c - 为什么gets函数如此危险以至于不应该使用它?

标签 c fgets buffer-overflow gets

当我尝试通过 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/

相关文章:

c - 使用多线程读取文件

c - fgets() 的返回值

python - 缓冲区溢出攻击,执行未调用的函数

c - 修改有缓冲区溢出漏洞的C代码跳过代码

c++ - 是否可以通过另一个程序调用一个程序

python - Linux:如何模拟接口(interface)上的传入数据包?

c - 使用 sscanf() 拆分 AT 命令字符串

C strstr 无法正常工作

c - 结构元素无法分配这个问题,但我无法得到适当的结果?

c - 仅让两个进程在 MPI 中执行代码 - 虽然不知道哪些进程将进入代码段