指针使用%p输出,区分%x与%p的区别?

几年前写的一个模块,前几天准备把它拿出来编译成64位的版本使用,因为对于windows的API一直是按照参数微软文档给出的原型进行调用,也没有指针到整数的强转,因此整个编译几乎没遇到问题,直接生成64位版本,但是测试时发现一个问题,所有的运行log输出的地址值都不对,64位系统下log里记录的还是32位的地址值,显然是被截断的地址值。看了一下代码,原来所有指针的格式化用的都是”%x”,真是欲哭无泪,在写这个模块的时候,我是知道格式化输出指针应该用”%p”,但是我仍然抱着无所谓的放任态度到处写”%x”,如今只能自食苦果。

本来可以安排别人修改,但是我决定自己改。搜索了一下,大概两三百个地方需要从”%x”修改成”%p”,是个无聊的体力活,我坚持自己改,做为对自己的惩罚。C语言的用法虽然灵活,==但是仍然有正确做事的原则,违反原则终究会受到惩罚==。一天修改下来老眼昏花,我决定以后再不犯此类错误。

==%p是打印地址的,%x是以十六进制形式打印,完全不同!另外在64位下结果会不一样,所以打印指针老老实实用%p。==

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值