
上QQ阅读APP看书,第一时间看更新
2.5 字符串处理函数
2.5.1 gets()
如果在C和C++安全编程领域存在一条硬性的规定,那么它一定是永远不要使用gets()!在本书有漏洞的程序例子中,gets()函数频频出现。gets()函数从标准输入读取一行输入到缓冲区中,直到遇到一个换行符或文件结束标志(EOF)为止。它不对缓冲区溢出进行任何检测。以下文字摘自该函数的使用手册:
永远不要使用gets()。因为除非事先知道数据,否则永远无法确定gets()将会读入多少字符,而且gets()会在缓冲区末尾以外继续存储字符,因此对它的使用是极其危险的。使用它只会破坏计算机系统的安全性。
如前所述,gets()函数已在ISO/IEC 9899:TC3中被弃用并在C11中被删除。
由于gets()函数不能被安全地使用,因此有必要使用替代的函数,对此有几个不错的选项可用。选择哪个函数主要取决于采取的总体办法。