好奇贴
"烫 "
有时在定义一个字符数组后不给它赋初值: char str[32];
然后就输出它会出再很多个 '烫 '字
为什么是 "烫 "这个字呢?不能是别的字吗?
[解决办法]
因为VC中在DEBUG模式下,会自动为未初始化的空间写上一个初值,以帮助在出错的情况下快点必现问题。
而VC所用的那个初值在字符串中就恰好是构成了汉字“烫”的内码。
[解决办法]
是这样的,按C++标准,编译器不会对栈变量作初始化,因此在赋值之前它们的值可能是任何数. 而VC为了避免出现随机错,在任何一个函数开始执行之前把它所用到的栈内存都用0xCC填充(我觉得他们不用0x00填充是有充分理由的,至于为何是0xCC我就不知道了,大概是当初VC开发组随便挑的吧).
这样,在你的char str[32]没赋值之前,它的内容是32个 '\xCC '字符. 因为0xCC> 0x80, Windows把每两个char当成一个汉字, 而0xCCCC在GBK编码中代表的就是汉字 "烫 ".
现在还感觉烫吗? 呵呵.