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