c语言中gets()和puts()的问题
程序如下:main(){charabc[1];gets(abc);puts(abc);}输入:abcdefjhigklmn输出:abcdefjhigklmn我定义字符数组...
程序如下:
main(){
char abc[1];
gets(abc);
puts(abc);
}
输入:abcdefjhigklmn
输出:abcdefjhigklmn
我定义字符数组时只定义长度为一,但是为什么输入abcdefjhigklmn后它同样储存,然后输出,明显储存单元不够啊!!?? 展开
main(){
char abc[1];
gets(abc);
puts(abc);
}
输入:abcdefjhigklmn
输出:abcdefjhigklmn
我定义字符数组时只定义长度为一,但是为什么输入abcdefjhigklmn后它同样储存,然后输出,明显储存单元不够啊!!?? 展开
4个回答
展开全部
gets函数可以无限读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值,为了避免这种情况,我们可以用fgets()来替换gets()。这个事实导致gets函数只适用于玩具程序。
追问
怎么才能查看buffer的空间大小??
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char定义的是个字符,字符的长度是有限制的,你定义是一个,你输入那么多,所以才会出现溢出限制,你最好把字符串定义好好看看,这样会更好的帮助你。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
缓冲区溢出。这个C语言不做检查的
你输入的再长一点,估计程序要崩溃了吧
比如输入两百个a试试
你输入的再长一点,估计程序要崩溃了吧
比如输入两百个a试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询