为什么VC中会出现“烫烫烫”和“屯屯屯”呢?这来源于C/C++中变量默认不初始化。
C/C++的变量分为声明和赋值操作,声明变量不会对内存区域进行清理,而赋值时才会操作内存。
微软的VC编译器会将未初始化的栈空间以16进制的0xCC填充,而未初始化的堆空间使用0xCD填充,而0xCCCC和0xCDCD在中文的GB2312编码中刚好对应“烫”和“屯”字。
因此,如果一个字符串没有结束符“\0”,直接输出的内存数据转换为字符串就刚好对应“烫烫烫”和“屯屯屯”。
为什么VC中会出现“烫烫烫”和“屯屯屯”呢?这来源于C/C++中变量默认不初始化。
C/C++的变量分为声明和赋值操作,声明变量不会对内存区域进行清理,而赋值时才会操作内存。
微软的VC编译器会将未初始化的栈空间以16进制的0xCC填充,而未初始化的堆空间使用0xCD填充,而0xCCCC和0xCDCD在中文的GB2312编码中刚好对应“烫”和“屯”字。
因此,如果一个字符串没有结束符“\0”,直接输出的内存数据转换为字符串就刚好对应“烫烫烫”和“屯屯屯”。
3330
2015

被折叠的 条评论
为什么被折叠?