为什么get()已被弃用?

时间:2015-06-17 11:48:26

标签: c include c-strings

在我的代码中使用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]

任何具体原因?

2 个答案:

答案 0 :(得分:3)

  

有人能解释为什么编译器会这样显示......?

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

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

(##)要迂腐,编译器(gcc)本身并不会生成警告,而是由pragmagets()glibc的实现引起的。导致编译器发出警告的list.style.visibility中的1}}。 [礼貌,FUZxxl,来自重复的答案。]

答案 1 :(得分:2)

  1. gets可能导致缓冲区溢出,因为它不考虑数据的长度。更多详情请点击此处:gets() function in C

  2. 已弃用的消息表示此函数已标记为已弃用,可能会在以后删除标准。所以不鼓励用户使用它。