c指针溢出问题

zhkjoy 2009-10-16 10:24:26
刚刚那个怎么被结贴了啊,那我来开个吧。


char a='s';
char str[8]="Hello123";

printf("%c", a); //还是S,为什么?
printf("\n%08X %08X\n",&a,&str[8]); //输出一样的地址



上面Hello123后面不是还有'\0',为什么不把a里面的值给挤掉?
...全文
750 26 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhkjoy 2009-10-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 beckle_ye 的回复:]
引用 4 楼 zhkjoy 的回复:
用vc编译的


是VC6?
我的反正编译哦不通过,

而且,即使通过了,这变量的内存分配是由编译器控制的,不同的编译器有不同的处理,
如果想要在不同平台执行,还是最好不写这种依赖特定编译器的DD
[/Quote]

是vc6啊,我编译的时候一点警告都没有。
zhkjoy 2009-10-16
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20091016/08/c37eecca-8634-41fb-a052-9aedc9a5556b.html?12346

你们可以先看看上面这个贴,再来回答。
我是在这边,因为结贴了,所以新开了一个贴。
平凡的思想者 2009-10-16
  • 打赏
  • 举报
回复
因为地址空间是向上增长的,str的地址大于&a。
所以
char a='s';
char str[8]="Hello123";
不会把a挤掉。

必须像如下处理:
char str[8];
char a='s';
strcpy(str,"Hello123");
这样才会挤掉。
肥多罗 2009-10-16
  • 打赏
  • 举报
回复
N年前的编译器啊?
Z782282738 2009-10-16
  • 打赏
  • 举报
回复
str[8]="Hello123"; 错误也是可以执行的啊!
zhkjoy 2009-10-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 cfz379945430 的回复:]
再说你的程序编译就通不过,改成char str[]="Hello123";

[/Quote]

我结果都贴出来了,当然是编译通过了。我用的是vc编译器,可能编译器不同吧。
beckle_ye 2009-10-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhkjoy 的回复:]
用vc编译的
[/Quote]

是VC6?
我的反正编译哦不通过,

而且,即使通过了,这变量的内存分配是由编译器控制的,不同的编译器有不同的处理,
如果想要在不同平台执行,还是最好不写这种依赖特定编译器的DD
ArmStronger 2009-10-16
  • 打赏
  • 举报
回复
再说你的程序编译就通不过,改成char str[]="Hello123";
ArmStronger 2009-10-16
  • 打赏
  • 举报
回复
a和str指向的内存地址不一样,怎么会挤掉a
zhkjoy 2009-10-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jamesf1982 的回复:]
没看清出lz的问题,a和str[8]的空间分布由编译器决定,实际上有时编译器的优化会让debug版本和release版本的空间分布不一样。

如果想深入了解编译器的话,可以看一下编译方面的书籍,讨论这个问题由于要考虑多个平台以及优化机制的不同,不建议深入。
[/Quote]

这是跟编译器有关么,如果是这样的话,那我就不多问了,先再学习一会C。
赵4老师 2009-10-16
  • 打赏
  • 举报
回复
在调试窗口里面打开汇编代码看一下不就什么都明白了吗?

zhkjoy 2009-10-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jamesf1982 的回复:]
&str[8]越界了
[/Quote]

知道,我就是想问为什么数组后面的'\0'不会把a里面的值清掉。
james_hw 2009-10-16
  • 打赏
  • 举报
回复
没看清出lz的问题,a和str[8]的空间分布由编译器决定,实际上有时编译器的优化会让debug版本和release版本的空间分布不一样。

如果想深入了解编译器的话,可以看一下编译方面的书籍,讨论这个问题由于要考虑多个平台以及优化机制的不同,不建议深入。
james_hw 2009-10-16
  • 打赏
  • 举报
回复
&str[8]越界了
zhkjoy 2009-10-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 borefo 的回复:]
char str[8]="Hello123";
你规定了数组大小呀,把数组大小去掉试试
[/Quote]

我就是想看看溢出的时候什么样子的。
zhkjoy 2009-10-16
  • 打赏
  • 举报
回复
用vc编译的
zhkjoy 2009-10-16
  • 打赏
  • 举报
回复
没问题啊,我不是结果都贴出来了。
beckle_ye 2009-10-16
  • 打赏
  • 举报
回复
LZ用什么编译器编译通过的?
borefo 2009-10-16
  • 打赏
  • 举报
回复
char str[8]="Hello123";
你规定了数组大小呀,把数组大小去掉试试
zhkjoy 2009-10-16
  • 打赏
  • 举报
回复
看来也就这样了,结贴了。
加载更多回复(7)

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧