考虑以下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基础课程》。