使用和不附加换行符打印空字符指针时的不同输出

时间:2018-01-14 01:39:05

标签: c pointers

我在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会产生这样的差异?

1 个答案:

答案 0 :(得分:0)

您的两个示例都是每个标准的未定义行为。使用printf调用%s并传递NULL指针是UB。

因此讨论结果毫无意义。在一个系统上,您可能会获得一个结果,而在另一个系统上,您将获得另一个结果。

另见https://stackoverflow.com/a/11589479/4386427