永发信息网

C语言当中,gets和strcat都会导致缓存溢出,为什么前者被废除?

答案:1  悬赏:20  手机版
解决时间 2021-11-17 08:00
  • 提问者网友:相思似海深
  • 2021-11-16 19:34
C语言当中,gets和strcat都会导致缓存溢出,为什么前者被废除?
最佳答案
  • 五星知识达人网友:鱼芗
  • 2021-11-16 21:08
因为gets面对的是用户,无法控制用户行为,他可以输入无数字符,gets只会没完没了读取,直到碰到回车符,很容易就溢出。
而strcat不直接面对用户,它处理已经存在的没有问题的数据,所以只要程序员细心,就可以避免错误
举例
char buf[20];
gets(buf); //无法用任何手段来限制用户输入的字符小于20,可以在输入前提示,但不能阻止用户输入,也就是不能阻止崩溃
char s1[8] = "1234";
char s2[] = "abcdef";
strcat(s1, s2); //直接这样写可能会越界导致崩溃
if (strlen(s2) + strlen(s1) < sizeof(s1)) //但可以阻止崩溃
strcat(s1, s2);
else
printf("错误!!");
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯