免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1116 | 回复: 5
打印 上一主题 下一主题

关于字符串读取(请指点) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-03-25 15:53 |只看该作者 |倒序浏览
#include <stdio.h>;
int main()
{
   char str;
   scanf("%s",&str);
   printf("%s",&str);
}
这么用合法吗?总是感觉不对?一个字符变量怎么能保存一个字符串呢?
这个程序是不是存在地址的非法访问的问题啊?
执行起来没有报错啊

论坛徽章:
0
2 [报告]
发表于 2005-03-25 19:03 |只看该作者

关于字符串读取(请指点)

将char str 改为char *str

论坛徽章:
0
3 [报告]
发表于 2005-03-25 19:14 |只看该作者

关于字符串读取(请指点)

这样用是不合法的,这样会引起内存越界,从而破坏操作系统。

论坛徽章:
0
4 [报告]
发表于 2005-03-25 20:50 |只看该作者

关于字符串读取(请指点)

[quote]原帖由 "changshao"]这样用是不合法的,这样会引起内存越界,从而破坏操作系统。[/quote 发表:


没那么严重了,别说楼主这个,就算真的内存越界,什么损坏都没有,OS会高高兴兴的杀掉这个进程。
现在的OS,linux/Win/hurd什么的全都这样,这可不是DOS时代了,病毒都能烧毁主板

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2005-03-26 09:59 |只看该作者

关于字符串读取(请指点)

问个问题,为什么什么损坏都没有?printf它还是输出来了,就是说它写入了那个地址咯?那之后系统才会结束进程吧.但字符串数据写入地址是否就破坏了原来的东西呢?

论坛徽章:
0
6 [报告]
发表于 2005-03-26 12:05 |只看该作者

关于字符串读取(请指点)

楼主的程序这样写,溢出是肯定的。在IA-32体系结构上,堆栈生长方向与内存地址增加方向是相反的,溢出的字符串会覆盖char str之后的内容,由于编译器出于内存对齐的需要会多分配一些内存,只要在这个范围内就不会出错。如是溢出的数据将main函数的返回地址覆盖,在执行结束时,除了能打印出结果,还会得到段错误。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP