声明gets是:
char * gets ( char * str );
Run Code Online (Sandbox Code Playgroud)
请注意str的最大尺寸的明显遗漏.
请注意,gets与fgets完全不同:不仅使用stdin作为源,而且它不包括结果字符串中的结束换行符,并且不允许指定str的最大大小(这可能导致缓冲区溢出).
并且:
最新版本的C标准(2011年)最终将该功能从其规范中删除.该函数在C++中已弃用(截至2011年标准,遵循C99 + TC3).
当然,fgets现在通常建议将其替换为gets,因为它的声明如下:
char * fgets ( char * str, int num, FILE * stream );
Run Code Online (Sandbox Code Playgroud)
它DOES需要的尺寸参数.这使它比它更安全gets.
既然我不愿意花钱去下载或购买C11 standard,那么是否有人可以了解弃用的原因gets及其对未来代码意味着什么?为什么它在fgets更安全时存在于同一个地方?为什么它只是刚刚被弃用?