这段代码是否有明确定义的行为?
char *str = NULL;
printf("%s\n",str);
针对 C++ (98/03 和 11) 和 C (99) 标准的上下文。
这段代码是否有明确定义的行为?
char *str = NULL;
printf("%s\n",str);
针对 C++ (98/03 和 11) 和 C (99) 标准的上下文。
C中的未定义行为
(C99, 7.19.6.1p8) "如果没有l长度修饰符,则参数应该是指向字符类型数组初始元素的指针。"
在某些编译器/ libc中,它会打印(null)
,而在其他一些编译器中,它会导致段错误。
(注意:在C中,违反不是约束的“应该”是未定义的行为,请参见标准C中的4.p2“一致性”)
是的。
printf
会解引用指针str
,而解引用空指针是未定义行为。
printf
是否将指针std解引用视为标准的一部分? - Luchian Grigoreprintf
在解引用之前检查 NULL
(就像在 glibc 中当前实现的那样)。 - Šimon Tóth
std::string
)。 - Kerrek SB