当我尝试使用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/58429389/