c - 打印带有和不带有换行符的空字符指针时的不同输出

标签 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 有这么大的不同?

最佳答案

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

因此讨论结果是没有意义的。在一个系统上你可能会得到一个结果,而在另一个系统上你会得到另一个结果。

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

关于c - 打印带有和不带有换行符的空字符指针时的不同输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48245962/

相关文章:

c - 如何将数组传递给 C 中的方法并编辑内容?

c++ - 如何确定平台上的最大指针大小?

c - 如何在 C 中将数组作为函数参数传递?

c - 引用结构体值,但不断出现很多错误

c - 不可能的事情发生了!这是什么意思?

c - 在使用链表实现Stack的过程中出现Segmentation错误

c++ - 回调非静态 C++ 成员函数

C动态分配struct

c - 为什么我的共享内存中的链表总是导致段错误?

c - 转换到 iphdr 和 tcphdr 的正确偏移量是多少?