📜  在C中将NULL传递给printf

📅  最后修改于: 2021-05-25 22:45:55             🧑  作者: Mango

考虑以下C代码段。

char* p = NULL;
printf("%s", p);

上面程序的输出是什么?
打印期望以’\ 0’终止的字符数组(或字符串字面量),而它接收到空指针。将NULL传递给printf是未定义的行为。

根据第7.1.4节(C99或C11):库函数的使用

如果函数的参数具有无效的值(例如,函数域之外的值,或者程序地址空间之外的指针,或者为空指针,或者指向相应参数时指向不可修改存储的指针) (具有const限定符)或参数数量可变的函数不希望的类型(升级后),则行为未定义。

一些编译器可能会产生空值,而其他一些则可能会产生Segmentation Fault。 GCC打印(空)。

// Effect of passing null pointers to ( %s ) 
// printf in C
#include 
  
int main()
{
   char* p = NULL;
   printf( "%s", p);
   return 0;
}

在GCC中的输出:

(null)

请注意,根据C标准,以上程序可能会导致未定义的行为。

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。