c语言输入字符串的问题 急!!

[复制链接]
查看11 | 回复5 | 2012-11-22 12:48:05 | 显示全部楼层 |阅读模式
是的,字符串是以\0为结束符的,虽然你只定义2个保存空间来保存输入的内容,但输入是不管这个的打印时也是以\0为结束符的....你的程序能打印出来算"走运"吧...如果有其它语句正好使用到你定义的字符串后边的内存,就会靠成程序漰掉等问题这种也叫"溢出",你输入的字符串已经溢出了....溢出也是编程时经常碰到的问题,这个编译器是不管的,是要靠程序员自己去注意的...典型的溢出漏洞就是系统的漏洞了....现在发现的系统漏洞大多以内存溢出为主!===================================================================#include int m...
回复

使用道具 举报

千问 | 2012-11-22 12:48:05 | 显示全部楼层
要理解 scanf输入字符串 是遇到 空格、转行、回车 为结束符 才结束输入,st 这个只是给出 内存地址,开始保存字符串的地址你这上面只是数组越界了...
回复

使用道具 举报

千问 | 2012-11-22 12:48:05 | 显示全部楼层
这是因为刚好系统分配str1、str2后面的内存没被其他变量占着。如果有别的变量刚好在str1越界的地方,那么str1就不是这个结果,甚至导致崩溃,所以要避免这样做...
回复

使用道具 举报

千问 | 2012-11-22 12:48:05 | 显示全部楼层
你运气好!坏的情况下还会出现:内存不能读!建议你看一下编译器内存管理,还有程序在内存中的结构,哪些事放程序代码的,哪些放变量的,哪些放常量的,把这些搞清楚,对你学指针有好处,以后学汇编也会用到!...
回复

使用道具 举报

千问 | 2012-11-22 12:48:05 | 显示全部楼层
这个程序本身有问题的,只不过你运行的时候,内存没有出现错误罢了。str1所分配的内存地址和,str2所分配的内存地址,不在连续的空间内,所以没有把str2的地址内容写坏。...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行