本文主要是介绍程序中出现“烫烫烫烫烫烫烫.......”和“屯屯屯屯屯屯......”的原因,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在刚开始写程序的时候,经常会发生产生莫名的执行结果,最常见的就是在程序中输出“烫烫烫.....”或者“屯屯屯......”,以前不理解为什么,后来学了汇编以后才弄清楚。
以下面这段简单的代码为例进行说明:
1 #include <stdio.h>
2 int sum(int a, int b)
3 {
4 return a + b;
5 }
6 int main(void)
7 {
8 int a;
9 printf("%s\n", (char*)&a);
10 sum(1, 2);
11
12 return 0;
13 }
我们在第8行和第9行加一个断点,来看看它的反汇编代码:
从上面的汇编代码中,我们可以看到在开辟函数栈帧以后,对这个栈帧进行了初始化(上图中框起来的部分),初始化的值为0xCCCCCCCC,而“烫”字对应的十六进制正好是0xCCCC(一个汉字占两个字节),所以当使用了一个未初始化的局部变量时,它的初始值就是0xCCCCCCCC,如果对它进行以字符串的形式输出就会输出“烫烫烫......”。
以前在使用VC++6.0时,还会出现“屯屯屯......”的情况,这个原因和上面本质是一样的,只不过这个编译器进行函数栈帧的初始化时使用的值是“0xCDCDCDCD”,而“屯”字则对应十六进制为“0xCDCD”.
最后贴一下上面代码运行的结果:
这篇关于程序中出现“烫烫烫烫烫烫烫.......”和“屯屯屯屯屯屯......”的原因的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!