【发布时间】:2021-05-06 21:37:07
【问题描述】:
我正在尝试使用stdout stream 打印0x00000000 而不是(nil) 和0x08ffffff 而不是0x8ffffff。
所以基本上,char *ptr1 = 0x00000000 和 char *ptr2 = 0x08ffffff。
当我跑步时
printf("start of address is %p and end of address is %p", ptr1, ptr2);
我明白了
start of address is (nil) and end of address is 0x8ffffff
我实际上找到了解决这个问题的方法,我实际上会这样做:
char *ptr1 = 0x00000000;
char *ptr2 = 0x08ffffff;
printf("start 0x%08x and end 0x%08x\n",ptr1, ptr2);
这会生成
start 0x00000000 and end 0x08ffffff
但是,编译器会发送以下警告:
warning: format ‘%x’ expects argument of type ‘unsigned int’,
but argument 3 has type ‘void *’ [-Wformat=]
我应该如何修改 printf 来调整输出打印?
【问题讨论】:
-
将其转换为
uintptr_t并按照stackoverflow.com/questions/5795978/… 中的说明进行打印 -
printf("start %08x and end %08x\n", (uint32_t)ptr1, (uint32_t)ptr2); -
@WilliamPursell 非常糟糕的主意,因为 64 位环境越来越普遍。
-
@WilliamPursell 我收到此错误
error: ‘uint32_t’ undeclared (first use in this function) printf("%08x - %08x RW\n",(uint32_t)regions[i].from,(uint32_t)regions[i].to); -
@Hadi 如果您有机会在 64 位环境中编译此代码,那么无论如何您都不想像这样使用
uint32_t。