This question already has answers here:
Behaviour of printf when printing a %d without supplying variable name
                                
                                    (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