数组简单问题,请赐教!

enricozhang 2008-08-27 11:22:28

char s1[] = "Hello";
char s2[] = "World";
strcat(s1,s2); //为什么可以执行,按道理说s1只分配了,6个字符。为什么它能放下呢?请解释一下!谢谢
cout<<s1<<endl; //返回的却是HelloWorld


...全文
95 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shanpobaiyang 2008-08-27
  • 打赏
  • 举报
回复
水落石出
butabuta528 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 shanpobaiyang 的回复:]
数组越界后是不是一定还能够正常输出?
也就是越界后是不是还能够存储数据?
敬请赐教
[/Quote]

事实上能不能正常输出要看程序被系统强制结束时,输出缓存的内容有没有被内核显示出来.
假设s2存在0x0000-0x0005单元
s1存在0x0006到0x000B单元
那么strcat(s1,s2);
这个结束后,s1数组已经越界.存放在0x0006-0x0011单元.
cout<<s1<<endl;正常输出.
这个结束以后,main进程Ret发生异常.
enricozhang 2008-08-27
  • 打赏
  • 举报
回复
要我在DEV c++中执行,并没有报错,这就是我搞不明白的地方,难道这和编译器有关?
shanpobaiyang 2008-08-27
  • 打赏
  • 举报
回复
数组越界后是不是一定还能够正常输出?
也就是越界后是不是还能够存储数据?
敬请赐教
lzr4304061988012 2008-08-27
  • 打赏
  • 举报
回复
虽然输出对了,但是造成了数租越界的错误
butabuta528 2008-08-27
  • 打赏
  • 举报
回复
数组越界也是可以执行的,不过当执行完毕以后,会报错.

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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