输出字符数组的时候为什么会输出很多“烫”???

zhy10 2007-01-23 03:58:46
恳请大家指教,谢谢!
...全文
1629 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
北极猩猩 2007-01-25
  • 打赏
  • 举报
回复
更正一下楼上的回答,"烫"的内码是两个"int 3"的指令。
OOPhaisky 2007-01-25
  • 打赏
  • 举报
回复
可能是由于你没有加上字符串结尾标志'\0'的缘故,“烫”就是“int 3”的指令码,以防执行到这些“本不应该被执行的代码 ”时中断程序。
KenYuan2016 2007-01-25
  • 打赏
  • 举报
回复
在下面几种情况下,数组的输出都是不可知的。
1。申请了新的内存但是没有初始化
2。a,b共用1块内存,用b去赋值后,用a去访问,例如union.
3。内存已经释放,但操作系统还没来得及回收的内存。

越界一般程序会报错的。
sharkoasis 2007-01-25
  • 打赏
  • 举报
回复
在定义数组时全赋0值!比如

1.char str[100]={0};

2.char str[100];
memset(str,0,100);
deh_1984 2007-01-25
  • 打赏
  • 举报
回复
决队是越界了,要加'\0'
shan_ghost 2007-01-25
  • 打赏
  • 举报
回复
汗,继续勘误:上贴头三个字改为: “楼上的楼上的楼上”^_^
shan_ghost 2007-01-25
  • 打赏
  • 举报
回复
楼上的,注意 调试版本 四字。

据我观察,VC 6似乎就已经支持这样做了。一般来说填充的是9D、9C或CC。原因就是它们在很多平台上是无效指令或无效指针(由于机器指令会字或双字对齐,奇数地址的跳转会被很多16位以上的CPU拒绝)。


另,勘误:前面帖子中提及的应为《write clean code》

再另:感叹:似乎去年吧,《write clean code》(中文名似乎是《编写无错代码》)这本书还红遍半边天,刚才搜索已经几乎看不到中文信息了。
但我敢说,无论用什么语言,这本书都应是必读的经典。可惜,连大略读过的都很少见,潜心读过的似乎更少。也许很多人认为争论C有没有死比起“让自己写的程序不要太垃圾”更为重要?……
我啃 2007-01-25
  • 打赏
  • 举报
回复
边界没有控制好,VC通常都会填充0XCC作为无效值有利错误防范,(int 03指令强制退出)化到输出上便变成了烫字
祝云飞 2007-01-25
  • 打赏
  • 举报
回复
没初始化吧
femalelover 2007-01-25
  • 打赏
  • 举报
回复
1、编译器在调试版本会自动在未初始化或已释放的内存中填充0xCC
----------
不见得吧? 很多情况下所谓"已释放的内存"其实只是给那块内存挂上"可使用"的标记, 而里面的内容并不改变.
shan_ghost 2007-01-25
  • 打赏
  • 举报
回复
两种可能:

1、编译器在调试版本会自动在未初始化或已释放的内存中填充0xCC。这样一旦出现访问未初始化变量、野指针等等问题时就会立即报错。便于尽早解决问题。(见 write clear code 一书的相关讨论);

2、打开机箱,改进散热措施(CPU&内存条:烫死啦!!)。
pottichu 2007-01-23
  • 打赏
  • 举报
回复
最后需要加上 '\0'
toddzst 2007-01-23
  • 打赏
  • 举报
回复
越界
dreamXren 2007-01-23
  • 打赏
  • 举报
回复
数组没有初始化或者没有赋值
wwwhaichun 2007-01-23
  • 打赏
  • 举报
回复
数组最后一个元素不是'\0'导致越界了
todototry 2007-01-23
  • 打赏
  • 举报
回复
越界了

64,651

社区成员

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

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