【发布时间】:2020-03-05 20:13:40
【问题描述】:
我今天尝试了一个代码,发现 printf("%d") 仍然有输出。 在我的电脑上,我得到“1487504216”的输出。 我想知道为什么我得到输出以及输出的含义。 以下是我尝试过的代码。
#include <stdio.h>
int main()
{
printf("%d");
return 0;
}
【问题讨论】:
我今天尝试了一个代码,发现 printf("%d") 仍然有输出。 在我的电脑上,我得到“1487504216”的输出。 我想知道为什么我得到输出以及输出的含义。 以下是我尝试过的代码。
#include <stdio.h>
int main()
{
printf("%d");
return 0;
}
【问题讨论】:
printf 返回打印的字符数。在您的情况下,您会得到一个奇怪的数字,因为您的格式无效。 printf("%d", 74) 将返回 2,因为它正在打印 2 个字符。
【讨论】:
printf("%d",... 期望下一个参数是要打印的数字。您没有向它传递参数,因此它只会从堆栈中获取下一个数据,并认为它是要打印的变量。所以你读取一些垃圾数据并打印出来......
正式地这被称为“未定义的行为”,我的解释对于某些编译器和平台可能是正确的,但其他编译器和平台可能会拦截从堆栈中读取的无效数据并中止您的程序,或者其他任何事情都可能发生:行为是未定义。
【讨论】: