使用NULL指针的基本printf行为

时间:2016-03-21 17:46:07

标签: c

我发现printf有些奇怪。

当我执行以下操作时

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

我遇到了段错误。

但是当我这样做时:

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

输出低于且没有崩溃。

.(null)

有谁知道行为差异的原因?

1 个答案:

答案 0 :(得分:0)

如果查看生成的汇编代码,您会看到printf ("%s\n",…)puts调用printf,而其他格式字符串则不适合此技巧。

碰巧在你的平台上,puts函数检测到空指针并善意避免崩溃,而printf函数则没有。

区别并不重要:将%s的空指针传递给{{1}}是未定义的行为。不要做任何事,即使在你的特定编译平台上,你第二次幸运。