正在追加'0'作为标志到printf
%p格式说明符是否正确?printf格式说明符为%p标记'0',是否正确?
#include <stdio.h>
int main()
{
int a = 42;
void* p = &a;
printf("Pointer address: %08p", p);
return 0;
}
也在Ideone。
编译类似于上面的一些代码,我没有警告或任何从Microsoft Visual C++ 2015年,但是从GCC 5.4.0警告:
“警告:‘0’与‘%P’已使用标志gnu_printf格式[-Wformat]”
从cppreference printf阅读,我看到:
0:整数和浮点数转换,前导零 用于填充的字段,而不是空格字符。对于整数 数字,如果明确指定了精度,则会忽略它。对于 使用此标志的其他转换会导致未定义的行为。如果 - 标志存在,则忽略 。
据我可以解释,%p是指针地址,毕竟这是一个整数,所以这个未定义的行为适用于%p?
如果不是,为什么GCC-Wformat警告?
oook,所以为什么downvote? – roalz
我猜想,因为代码是无意义的,不会为基本的语法原因编译? 'printf(“Pointer address:%08p”, return 0;'不要在这里键入代码,而是复制/粘贴实际的代码或一个工作示例 – Lundin
Jez,对,我刚刚发现从Ideone复制粘贴不起作用正如我所料,编辑。 – roalz