C语言里的gets()函数
最近在看一个学生写的关于C语言算法竞赛的书,里面提到:gets()函数有缓冲区溢出漏洞,应该用scanf()读取字符串。为什么?...
最近在看一个学生写的关于C语言算法竞赛的书,里面提到:gets()函数有缓冲区溢出漏洞,应该用scanf()读取字符串。为什么?
展开
3个回答
推荐于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函数是不安全的,它并不会检查缓冲区,非常容易出问题。
【当然了,具体得看你用什么标准来写代码,老式的编译器应该不会有这些提示】。
现在一般都会选择用C++中更加安全的cin。
-----------------
scanf函数是不安全的,它并不会检查缓冲区,非常容易出问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-09-12
展开全部
用gets的安全版本get_s,这样可以防止内存溢出,gets_s(char *bufferr,size_t SizeByCharater)有两个参数,⑴字符串缓冲区⑵可存储的最大长度
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询