C 语言代码出错为什么显示「烫烫烫」,而不是其它字?
此问题应该是只出现在VC的 Debug 模式下。
对于未初始化的栈内存全部填成 0xcc,对应于汉字字符串看就是 烫烫烫烫……
对于未初始化的堆(new)内存全部填成 0xcd,对应于汉字字符串看就是 屯屯屯屯……
Release模式下直接就是内存中随机的数据。
因为输出"烫烫烫烫"是因为vc会自动把未用函数的局部变量空间按字节全部初始化为CC(打个比方,你定义一个10个元素的char数组,结果你初始化了2个元素,后面没初始化,没赋值,没有使用,就变CC了)。CC CCH在Unicode的编码中就是表示中文的“烫”,所以就是很多“烫”字。
编程精粹里面解释过这个问题,p49.Microsoft applications use 0xCC to fill blocks because it is large and easily noticeable, and if executed, causes the code to safely drop into the debugger.只在debug模式下,微软的编译器行为。打不出字
一个0xcc是x86中断指令int 3的机器码,两个0xcc(0xcccc)就是一个烫字。0xcdcd是中断指令int 0xcd的机器码,就是一个屯字。他们在被执行的时候都会导致debugger中断因为通常认为未初始化的内存不应该被执行。
溢出了溢出了。输出"烫烫烫烫"是因为vc会自动把未用函数的局部变量空间按字节全部初始化为CC。而你定义的字符数组空间不够,所以就占用了那部分不属于你的空间,因为cout输出char*是要遇到空字符才停止的,所以便把那些垃圾都打出来了。
处理字符串的时候要在后面加上'\0'

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。