首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

好奇贴,该如何处理

2012-02-27 
好奇贴烫 有时在定义一个字符数组后不给它赋初值:charstr[32]然后就输出它会出再很多个 烫 字为什么是

好奇贴
"烫 "

有时在定义一个字符数组后不给它赋初值:   char   str[32];
然后就输出它会出再很多个 '烫 '字

为什么是 "烫 "这个字呢?不能是别的字吗?

[解决办法]
因为VC中在DEBUG模式下,会自动为未初始化的空间写上一个初值,以帮助在出错的情况下快点必现问题。
而VC所用的那个初值在字符串中就恰好是构成了汉字“烫”的内码。
[解决办法]
是这样的,按C++标准,编译器不会对栈变量作初始化,因此在赋值之前它们的值可能是任何数. 而VC为了避免出现随机错,在任何一个函数开始执行之前把它所用到的栈内存都用0xCC填充(我觉得他们不用0x00填充是有充分理由的,至于为何是0xCC我就不知道了,大概是当初VC开发组随便挑的吧).

这样,在你的char str[32]没赋值之前,它的内容是32个 '\xCC '字符. 因为0xCC> 0x80, Windows把每两个char当成一个汉字, 而0xCCCC在GBK编码中代表的就是汉字 "烫 ".

现在还感觉烫吗? 呵呵.

热点排行