首页 > 解决方案 > C如何在没有编译器警告的情况下将地址打印为十进制值(不是十六进制)

问题描述

我有一个int指向另一个地址的指针int

使用格式说明符打印指针时%p(正如 Stack Overflow 上的许多答案所建议的那样),它以十六进制表示形式打印。

如何使用十进制表示打印指针的值?


代码示例

我已经想出一个可以%zu这个答案中使用的。

int i = 1;
int *p = &i;
printf("Printing p: %%p = %p, %%zu = %zu\n", p, p);

当我使用https://onlinegdb.com/EBienCIJnm运行该代码时

warning: format ‘%zu’ expects argument of type ‘size_t’, but argument 3 has type ‘int *’ [-Wformat=]                                                                 
Printing p: %p = 0x7ffee623d8c4, %zu = 140732759529668

有没有办法printf用十进制表示指针的值,而没有编译器警告?

标签: cpointersprintfmemory-addressformat-string

解决方案


转换为定义的uintptr_t类型并使用定义的说明符<stdint.h>格式化:PRIuPTR<inttypes.h>

#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("%" PRIuPTR "\n", (uintptr_t) &argc);
}

推荐阅读