#include<stdio.h>
static char c;
static int i;
static float f;
static char s[100];
void main ()
{
printf("%d %d %f %s",c,i,f);
}
我期望输出错误,但实际输出为0 0 0.000000 (null)
答案 0 :(得分:4)
您的格式字符串需要4个参数,但您只能传递3个参数。这样做会调用undefined behavior,这意味着您无法预测程序的行为。
在这种情况下,将打印字符串“(null)”,但是您的代码可以打印一些随机的字符序列,没有多余的字符,否则可能会崩溃。没有保证。
可能发生的 是%s
格式说明符试图读取堆栈上的下8个字节以获取指针,而这8个字节恰好都是0,因此打印字符串“(null)”,因为它读取了NULL指针。但是同样,也不能保证。
也请参见What is the behavior of printing NULL with printf's %s specifier?。