此代码是否已定义行为?
char *str = NULL;
printf("%s\n",str);
在C ++(98/03和11)和C(99)标准的背景下。
答案 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