C语言里的gets()函数

最近在看一个学生写的关于C语言算法竞赛的书,里面提到:gets()函数有缓冲区溢出漏洞,应该用scanf()读取字符串。为什么?... 最近在看一个学生写的关于C语言算法竞赛的书,里面提到:gets()函数有缓冲区溢出漏洞,应该用scanf()读取字符串。为什么? 展开
 我来答
匿名用户
推荐于2018-05-09
展开全部
对的,确实有举出漏洞。以下是个人建议,希望对楼主有所帮助。首先我们应该先认识一下gets和scanf的语法解构。如果要给一个字符串赋值,那我们可以这样做。int a[10];gets(a);或是for(i=0;i<10;i++)scanf("%d",&a[i]);由上我们可以看出,scanf每次只能输入一个字符,然后回车,继续循环。而gets呢,需要把所有的字符串都输入完后回车结束。这就造成了一个问题。如果我们输入的字符串多于10个单位呢?我们输入的“a[20]”个空间的字符。这就可能会产生溢出漏洞。 仅代表个人建议,希望对楼主有所帮助。
匿名用户
2013-09-12
展开全部
大约在2005年,scanf也被证实存在缓冲区溢出漏洞,然后被标记为作废
【当然了,具体得看你用什么标准来写代码,老式的编译器应该不会有这些提示】。
现在一般都会选择用C++中更加安全的cin。
-----------------
scanf函数是不安全的,它并不会检查缓冲区,非常容易出问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-09-12
展开全部
用gets的安全版本get_s,这样可以防止内存溢出,gets_s(char *bufferr,size_t SizeByCharater)有两个参数,⑴字符串缓冲区⑵可存储的最大长度
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式