【问题标题】:Why gets() is deprecated? [duplicate]为什么不推荐使用gets()? [复制]
【发布时间】:2015-09-02 15:15:57
【问题描述】:

在我的代码中使用gets() 时,编译器会喊叫

warning: the 'gets' function is dangerous and should not be used.`

warning: ‘gets’ is deprecated (declared at /usr/include/stdio.h:638)
[-Wdeprecated-declarations]

有什么具体原因吗?

【问题讨论】:

  • 使用 fgetsstdin 代替。正如消息所说,gets 很危险,因为它没有提供防止缓冲区溢出的保护..
  • “为什么编译器会在这里发出警告?”的字面意思。是“因为编译器的程序员让它这样做了。”

标签: c include c-strings


【解决方案1】:

谁能解释一下为什么编译器会这样显示...?

是的,因为gets() 函数很危险,因为它存在缓冲区溢出问题。任何人都应该避免使用它。

另外,关于-Wdeprecated-declarations 的警告,gets() 不再是C 标准的一部分 [C11 向前]。因此,C 库 compilers 不再绑定 来支持它。将来可以将其删除。为了警告开发人员注意潜在的陷阱并阻止进一步使用gets(),编译器## 会发出警告消息。


(##) 为了迂腐,警告不是由编译器 (gcc) 自己生成的,而是由 pragmagets() 中的 gets() 实现上的属性引起的987654330@ 导致编译器发出警告。 [礼貌,FUZxxl,来自欺骗的答案。]

【讨论】:

    【解决方案2】:
    1. gets 可能会导致缓冲区溢出,因为它不考虑数据的长度。更多详情在这里:gets() function in C

    2. 不推荐使用的消息意味着,此功能被标记为不推荐使用,并且可能会在以后从标准中删除。所以劝阻用户使用它。

    【讨论】:

      猜你喜欢
      • 2013-08-02
      • 2021-09-12
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 2013-05-27
      • 2016-02-23
      • 2017-11-04
      相关资源
      最近更新 更多