【问题标题】:What is the behavior of the conversion specifier `p` with `NULL` pointer?带有“NULL”指针的转换说明符“p”的行为是什么?
【发布时间】:2012-05-14 17:42:24
【问题描述】:

不知道有没有:

void *ptr = NULL;
printf("%p\n", ptr);

会一直给(nil)输出吗?

它依赖于标准库实现,还是 C99 标准规范?

【问题讨论】:

  • 我认为标准没有定义 %p 格式的 printf 输出是什么。这取决于实施。
  • 我修改了这个问题,因为答案是错误的。这是一个约 5000 次浏览量的问题。
  • @Stargateur:在去死灵法师徽章的路上吗?
  • @chqrlie 不只是来自C chat 的用户,他们确认这是未定义的行为,但他不想回答高分错误答案的旧问题......所以他想提出一个新问题.所以我只是尝试改进问题以说服他在这里回答:p。

标签: c null printf


【解决方案1】:

在我的系统上它产生(null) 所以我猜它是定义的实现。更一般地说,%p 打印的所有内容都是实现定义的:

7.21.6.1

参数应该是一个指向void的指针。指针的值为 转换为打印字符序列,在 实现定义的方式。

【讨论】:

    【解决方案2】:

    总是会给出(nil)?

    一点也不。在我的机器上(带有i686-apple-darwin11-llvm-gcc-4.2 的Mac)它打印0x0

    【讨论】:

      猜你喜欢
      • 2012-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      • 2012-07-20
      • 1970-01-01
      • 2012-11-10
      • 2020-04-13
      相关资源
      最近更新 更多