Linux printf将%p参数呈现为带有前导0x的十六进制数字。有没有办法让它不打印0x? (需要在32位和64位上工作。)
答案 0 :(得分:6)
您可以使用uintptr_t
中的<inttypes.h>
格式说明符:
#include <inttypes.h>
[...]
printf("%"PRIxPTR"\n", (uintptr_t) p);
对于%x
类型,它的作用类似于uintptr_t
,这是一种整数类型,能够从/向任何指针类型进行往返转换。
答案 1 :(得分:0)
使用%llx,它肯定会在64位上运行。试过并测试过。
答案 2 :(得分:0)
使用%lx
或%08lx
。它适用于32位和64位linux gcc,因为long int
的宽度始终与void *
相同。不适用于MSVC,因为long int
在MSVC中始终为32位。
如果您希望它适用于所有编译器,您可以使用%llx
并将指针转换为unsigned long long int
,但它在32位时效率不高。
如果您也想要效率,请为不同的情况定义不同的宏。