gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:36:11 24 4
gpt4 key购买 nike

我有一个 int指向另一个 int 地址的指针.
使用格式说明符打印指针时 %p (正如 Stack Overflow 上的许多答案所建议的那样),它印有 十六进制 表示。
如何使用 打印指针的值十进制表示?

代码示例
我想出一个可以使用 %zu来自 this answer .

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具有十进制表示的指针值,没有编译器警告?

    最佳答案

    转换为 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);
    }

    关于C 如何在没有编译器警告的情况下将地址打印为十进制值(不是十六进制),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65756913/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com