c语言中gets()和puts()的问题

程序如下:main(){charabc[1];gets(abc);puts(abc);}输入:abcdefjhigklmn输出:abcdefjhigklmn我定义字符数组... 程序如下:
main(){
char abc[1];
gets(abc);
puts(abc);
}
输入:abcdefjhigklmn
输出:abcdefjhigklmn
我定义字符数组时只定义长度为一,但是为什么输入abcdefjhigklmn后它同样储存,然后输出,明显储存单元不够啊!!??
展开
 我来答
你那里还好吗想你d8d28
2013-04-03 · TA获得超过195个赞
知道小有建树答主
回答量:195
采纳率:100%
帮助的人:75.6万
展开全部
你申请了一个char的空间,只有一个字节,但是内存分配的时候不会真的只分配你一个字节的空间,它还有其他的信息保存在后面的空间里面,但是你使用的时候最好还是不要超出你自己申请的空间,不然很可能会破坏它的数据结构!!所以能输进去很正常!!

字符串输出的话要是不遇到'\0'是不会停止的,你试试给abc[0]赋一个值,用puts(abc)应该照样会输出好多东西!!所以要把char数组当字符串输出的话,最好要在数组的结尾处加个'\0'
申江渔夫
2013-04-03 · TA获得超过895个赞
知道小有建树答主
回答量:1479
采纳率:0%
帮助的人:690万
展开全部
gets函数可以无限读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值,为了避免这种情况,我们可以用fgets()来替换gets()。这个事实导致gets函数只适用于玩具程序。
追问
怎么才能查看buffer的空间大小??
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
灿温沫M
2013-04-03 · 超过12用户采纳过TA的回答
知道答主
回答量:75
采纳率:0%
帮助的人:22.2万
展开全部
char定义的是个字符,字符的长度是有限制的,你定义是一个,你输入那么多,所以才会出现溢出限制,你最好把字符串定义好好看看,这样会更好的帮助你。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lyqf365
2013-04-03 · TA获得超过1185个赞
知道小有建树答主
回答量:1291
采纳率:100%
帮助的人:780万
展开全部
缓冲区溢出。这个C语言不做检查的
你输入的再长一点,估计程序要崩溃了吧
比如输入两百个a试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式