【发布时间】:2026-02-10 16:35:01
【问题描述】:
我在 Linux 上尝试了以下代码
#include<stdio.h>
int main()
{
char *p=NULL;
printf("%s",p);
return 0;
}
#include<stdio.h>
int main()
{
char *p=NULL;
printf("%s\n",p);
return 0;
}
第一个输出:(null)
而第二个导致分段错误。
为什么\n 会产生如此大的影响?
【问题讨论】:
-
嗯,我也期待
(null),但我也得到了段错误。将\n替换为其他内容,例如printf("%su", p)打印(null)u。即使在\n之前添加一个空格,也会打印"(null) "。现在我很好奇。 -
两者都是未定义的行为
-
@Pablo 你得到什么结果并不重要。代码是 UB,可能会给出任何结果。
-
@Pablo 如果您认为该链接更合适,请将其标记为重复。
-
@4386427 我不认为这是 UB,使用 gcc 我总是看到
(null)在将NULL传递给%s时被打印,所以我认为这是正常行为。现在我知道得更多了。