【问题标题】:Why can't one print NULL in c program? [duplicate]为什么不能在 c 程序中打印 NULL? [复制]
【发布时间】:2020-05-15 14:56:30
【问题描述】:

在下面的程序中,我得到一个运行时错误,而不是我的程序打印 NULL。可能这是非常愚蠢或简单的理解,但我没有正确的答案。提前致谢。

#include<stdio.h>

int main() 
{
   char *p = NULL;
   printf("%c", *p);
   return 0;
}

【问题讨论】:

标签: c


【解决方案1】:

C 不会发现你试图取消引用空指针。

如果要查看指针的值(并查看指针是否为空),请使用以下 printf 语法:

   printf("%p\n", p);

【讨论】:

  • printf("%p\n", (void*)p); 最好避免调用未定义的行为。
  • @MikeCAT 你能提供一个参考,说明为什么使用char* 而不是void* 会导致未定义的行为吗?
  • @MikeCAT 请参阅C11 § 6.2.5 ¶ 28指向 void 的指针应具有与指向字符类型的指针相同的表示和对齐要求,其脚注 相同的表示和对齐要求意味着作为函数的参数、函数的返回值和联合成员的可互换性
【解决方案2】:

printf("%c", *p); 不要求printf 打印值NULL。它尝试使用p 指向的值。由于p 包含一个空指针,它没有指向一个有效的对象。

要打印p 的值,请使用printf("%p", (void *) p);

【讨论】:

    猜你喜欢
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 2015-06-28
    • 1970-01-01
    • 2014-03-12
    • 2021-12-29
    • 2015-11-28
    相关资源
    最近更新 更多