(null)如何打印?它背后的概念是什么?

时间:2019-07-17 03:05:04

标签: c

#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)

1 个答案:

答案 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?