如何解决C 如何在没有编译器警告的情况下将地址打印为十进制值不是十六进制
我有一个 commonjs()
指针指向另一个 int
的地址。
使用格式说明符 int
打印指针时(如 Stack Overflow 上的许多答案所建议的那样),它以十六进制 表示形式打印。
如何用十进制表示打印指针的值?
代码示例
我发现可以使用 this answer 中的 %p
。
%zu
当我使用 https://onlinegdb.com/EBienCIJnm
运行该代码时int i = 1;
int *p = &i;
printf("Printing p: %%p = %p,%%zu = %zu\n",p,p);
有没有办法在没有编译器警告的情况下warning: format ‘%zu’ expects argument of type ‘size_t’,but argument 3 has type ‘int *’ [-Wformat=]
Printing p: %p = 0x7ffee623d8c4,%zu = 140732759529668
使用十进制表示的指针值?
解决方法
转换为 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);
}
,
将指针投射到uintmax_t
(在<stdint.h>
中定义),并用%ju
打印投射结果:
printf("Printing p: %%p = %p,%%ju = %ju\n",p,(uintmax_t)p);
请注意,不能保证 uintmax_t
的宽度足以容纳一个指针,但它可能没问题。 (如果它不适用于您的平台,编译器可能会抱怨。)您可以按照其他地方的建议使用 uintptr_t
,但在 uintmax_t
不够宽的情况下,uintptr_t
获胜根本不存在。
总的来说,你最好学习如何处理十六进制输出:-)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。