C 当我告诉printf打印一个变量时会发生什么?
当我运行以下代码(在Eclipse上)时,会弹出一条消息,表明.exe已停止工作:C 当我告诉printf打印一个变量时会发生什么?,c,printf,C,Printf,当我运行以下代码(在Eclipse上)时,会弹出一条消息,表明.exe已停止工作: #include <stdio.h> main () { int x; x = 1; printf(x); } 然而,我的问题是,当我以前一种方式编码时,“在那里”发生了什么。第一个参数是字符串 在C语言中,值“1”被推到堆栈上以调用printf。printf需要一个字符串,因此它开始将1视为地址 这会导致“停止工作”-当
#include <stdio.h>
main ()
{
int x;
x = 1;
printf(x);
}
然而,我的问题是,当我以前一种方式编码时,“在那里”发生了什么。第一个参数是字符串
在C语言中,值“1”被推到堆栈上以调用printf。printf需要一个字符串,因此它开始将1视为地址
这会导致“停止工作”-当它试图查看地址1处的字符时。您的代码告诉
printf
在内存地址1
处打印字符串
您可能无法访问该函数,因此它会崩溃。从技术上讲,它不应该编译,但有关它为什么编译的一些信息,请参阅此处:在使用该函数之前阅读
printf()
)的文档()可能是个好主意。我投票将此问题作为离题来结束,因为我再次寻求对已确认UB的解释。谢谢。在到达地址区之前,我还有一段路要走,所以我会记住的。谢谢。在到达地址部分之前,我有一个特定的方法要走,所以我会记住这一点。
printf("%d", x);