c - 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
用十进制表示指针的值,而没有编译器警告?
解决方案
转换为定义的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);
}
推荐阅读
- r - R中分组数据的条件格式
- javascript - JSLint “这个函数需要一个‘use strict’ pragma。”
- html - 过滤 url 之间的所有内容
- google-cloud-platform - Google Cloud Datastore:使用 Node.js 批量导入
- android - 使用 .so 和 .com 文件打包到 .aar 库中
- powershell - 如何延迟 IIS 重启服务器?
- mongodb - Mongo:创建唯一的文本索引
- java - 使用 selenium webdriver 和 java 在 testng 中的数据提供者
- go - 如何使用连接池连接到 aerospike 服务器
- asp.net-core - AspNetCore Api 路由中的 Base64 编码