【发布时间】:2014-09-20 01:11:56
【问题描述】:
在编写单元测试时,我偶然发现了来自glibc 的一些奇怪行为,涉及"%p" 和NULL 指针。
如果我有一行如printf("NULL pointer is %p\n", NULL);,那么我会看到NULL pointer is (nil) 打印到屏幕上,正如我所料。
如果我改用宽字符版本:wprintf(L"NULL pointer is %p\n", NULL);,那么它会打印出NULL pointer is (,并在左括号处停止。如果我打印一个非NULL 指针,它会打印该指针,包括普通和宽字符版本。这是glibc 的已知错误,还是我只是遗漏了什么?
注意:我意识到 C 标准说带有 %p 的指针以实现定义的方式进行转换;只为 NULL 指针打印 ( 似乎很不寻常。
【问题讨论】:
-
看起来像一个错误.....
-
结果字符串与格式字符串的期望不匹配:在格式字符串中,
%p周围有单引号 ('),但它们没有出现在结果字符串。这是问题中的错字吗? -
你试过
NULL而不是L'\0'吗? -
@FiddlingBits
%p需要一个指针,而L'\0'是一个整数常量。无论如何,它仍然给出相同的结果。