gets
的声明如下:char * gets ( char * str );
请注意str的最大大小被明显省略了。 cplusplus.com表示:2
请注意,gets和fgets有很大的区别:gets不仅使用stdin作为源,而且在生成的字符串中不包括结束的换行符,并且不允许指定str的最大大小(这可能导致缓冲区溢出)。
此外:
C标准的最新修订版(2011年)已经从其规范中彻底删除了该函数。C++已经弃用该函数(自2011年标准开始,遵循C99+TC3)。
当然,现在常常推荐使用fgets
来替代gets
,因为它的声明看起来像这样:
char * fgets ( char * str, int num, FILE * stream );
它确实需要一个尺寸参数,这使得它比gets
更安全。
既然我不想花钱下载或购买C11标准
,有人能否解释一下为什么废弃gets
,以及对未来代码意味着什么?为什么fgets
更安全却存在于相同的位置?而且为什么现在才开始废弃它?
gets
被纳入标准。 - Yu Hao