是否打印了NULL字符串?

时间:2012-01-10 12:47:12

标签: c++ c standards undefined-behavior

此代码是否已定义行为?

char *str = NULL;
printf("%s\n",str);

在C ++(98/03和11)和C(99)标准的背景下。

3 个答案:

答案 0 :(得分:4)

C

中的未定义行为
  

(C99,7.19.6.1p8)“s如果不存在l长度修饰符,则参数   应该是指向字符数组的初始元素的指针   型“。

使用一些编译器/ libc打印(null)以及其他一些段错误。

(注意:在违反shall的C违反约束的行为是未定义的行为,请参阅标准C中的4.p2“符合性”

答案 1 :(得分:1)

printf将取消引用指针str,取消引用NULL指针为UB。

答案 2 :(得分:-1)

取消引用null中的C指针会产生undefined behavior,这可能是灾难性的。但是,大多数实现只是暂停执行相关程序,通常会出现分段错误。

请检查this