C语言关于gets函数输入串长度问题!

1.st[5]的大小是5个字节,为什么输入8个数字不会崩溃,而输入9个数字就崩溃。2.为什么puts还能正常的输出st[5]?3.为什么printf里面没有报数组越界错误... 1.st[5]的大小是5个字节,为什么输入8个数字不会崩溃,而输入9个数字就崩溃。2.为什么puts还能正常的输出st[5]?3.为什么printf里面没有报数组越界错误?4.为什么for循环只输出了4个数字?求高手帮忙分析分析gets函数和puts!谢谢啦!!财富值不是问题!一切为了知识! 展开
 我来答
百度网友711eabb
2017-02-15 · TA获得超过709个赞
知道小有建树答主
回答量:727
采纳率:83%
帮助的人:322万
展开全部
让人分析代码,至少要把代码贴出来运行啊,总不可能抄写你的代码吧!
gets和scanf()的区别就是前者接收空格、制表符Tab和回车等,遇见EOF停止!而后者遇见空格、制表符Tab和回车等就停止;
数组只能存1234\0;后面的56789都是越界的;为什么到8没有关系,而是9崩溃是因为你运气好,空闲内存还有;第9个刚好访问了其他程序的内存!
而为什么puts和printf可以打印到8是因为再8后面才遇到'\0';
为什么for只输出4个数;是因为你用的32位编译器,所以sizeof(st)==4;如果你用64的编译器,那么sizeof(st)==8;因为指针大小再32是4个字节,64位8个字节!

好了,老板的4个问题都帮你分析了!给财富值200;
豆皮白菜
2017-02-15
知道答主
回答量:3
采纳率:0%
帮助的人:3001
展开全部
char[5]是你开辟了五个字节的空间 sizeof(st)就是 5啊 所以就会有四个
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友289c0c0
2017-02-15 · TA获得超过4183个赞
知道大有可为答主
回答量:1531
采纳率:89%
帮助的人:622万
展开全部
gets()是C语言里一个非常危险的函数,主要原因是如果输入的字符串过长,会导致缓冲区溢出,也就是说多余的字符超出了指定的目标空间,如果这些多余的字符只是占用了尚未使用的内存,就不会立即出现问题,如果他们擦写掉了程序中的其他数据,会导致程序异常中止,就像你的截图一样,Unix系统更是会直接提示你“Segmentation fault”即分段错误,表示程序试图访问未被分配的内存。C99标准中的fgets()函数和C11标准中可选扩展函数gets_s()均可以防止这种事情的发生。总的来说,系统信任程序员而不信任用户。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式