This question already has answers here:
Behaviour of printf when printing a %d without supplying variable name
(6个答案)
2年前关闭。
我现在正在学习C编程(这是我的新手),并且我也在尝试各种方法以了解其工作原理。因此,我很清楚以下代码不是正确的代码。但我仍然尝试了一下,以了解如何进行编译:
我在命令行中得到了这个:
我想C会给我20 8 108 108 2。
进程返回0(0x0)执行时间:0.234 s
按任意键继续。
数字8、108、108和2在哪里?它们是如何产生的?
我只是想了解它是如何工作的。谢谢。
(6个答案)
2年前关闭。
我现在正在学习C编程(这是我的新手),并且我也在尝试各种方法以了解其工作原理。因此,我很清楚以下代码不是正确的代码。但我仍然尝试了一下,以了解如何进行编译:
#include <stdio.h>
#include <stdlib.h>
int {
printf("I think C will give me %d %d %d %d %d.", 20);
return 0;
}
我在命令行中得到了这个:
我想C会给我20 8 108 108 2。
进程返回0(0x0)执行时间:0.234 s
按任意键继续。
数字8、108、108和2在哪里?它们是如何产生的?
我只是想了解它是如何工作的。谢谢。
最佳答案
因为它是未定义的行为。
没有涉及任何随机变量,只是printf()
试图为每个"%d"
查找对应的参数,并且它访问不指向任何参数的内存,因此它将打印在那里找到的任何内容。
但严格来说,这是未定义的行为。如果格式说明符多于参数,则标准未指定行为。
因此,当函数期望值为5时,传递单个int
变量将导致未定义的行为,实际上,无法预测将要发生的情况。
10-08 13:25