吾爱程序员:这里有好玩的游戏和软件
当前位置:首页C语言教程 → gets() 使用起来有风险

gets() 使用起来有风险

来源:网络 | 更新时间:2022-01-13 07:27:51
考虑下面的程序。 
void read()
{
char str[20];
gets(str);
printf("%s", str);
return;
}
代码看起来很简单,它从标准输入中读取字符串并打印输入的字符串,但是由于gets() 没有进行任何数组绑定测试,因此存在缓冲区溢出问题。gets() 继续读取,直到它看到一个换行符。  为避免缓冲区溢出,应使用 fgets() 而不是 gets(),因为 fgets() 确保读取的字符不超过 MAX_LIMIT 个。
#define MAX_LIMIT 20
void read()
{
char str[MAX_LIMIT];
fgets(str, MAX_LIMIT, stdin);
printf("%s", str);

getchar();
return;
}
注意: fgets() 如果读取了 'n' 字符,则存储它,因此必须由程序员明确地删除它。因此,如果您打算保留换行符,通常建议您的 str 至少可以存储 (MAX_LIMIT + 1) 个字符。这样做是为了有足够的空间来在字符串末尾添加空终止字符 ''。 如果不打算保留换行符,那么可以简单地执行以下操作 -
int len = strlen(str);

// Remove the 'n' character and replace it with ''
str[len - 1] = '';
 

最新文章

热点资讯

手游排行榜

CopyRight 2020-2030吾爱程序员

鄂ICP备2021004581号-8

本站资源收集于网络,如有侵权请联系我们:35492删除0109@qq.com