小编use*_*113的帖子

使用gets防止缓冲区溢出

声明gets是:

char * gets ( char * str );
Run Code Online (Sandbox Code Playgroud)

请注意str的最大尺寸的明显遗漏.

cplusplus.com2:

请注意,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更安全时存在于同一个地方?为什么它只是刚刚被弃用?

c gets fgets buffer-overflow language-lawyer

4
推荐指数
1
解决办法
969
查看次数

标签 统计

buffer-overflow ×1

c ×1

fgets ×1

gets ×1

language-lawyer ×1