几年前写的一个模块,前几天准备把它拿出来编译成64位的版本使用,因为对于windows的API一直是按照参数微软文档给出的原型进行调用,也没有指针到整数的强转,因此整个编译几乎没遇到问题,直接生成64位版本,但是测试时发现一个问题,所有的运行log输出的地址值都不对,64位系统下log里记录的还是32位的地址值,显然是被截断的地址值。看了一下代码,原来所有指针的格式化用的都是”%x”,真是欲哭无泪,在写这个模块的时候,我是知道格式化输出指针应该用”%p”,但是我仍然抱着无所谓的放任态度到处写”%x”,如今只能自食苦果。
本来可以安排别人修改,但是我决定自己改。搜索了一下,大概两三百个地方需要从”%x”修改成”%p”,是个无聊的体力活,我坚持自己改,做为对自己的惩罚。C语言的用法虽然灵活,==但是仍然有正确做事的原则,违反原则终究会受到惩罚==。一天修改下来老眼昏花,我决定以后再不犯此类错误。
==%p是打印地址的,%x是以十六进制形式打印,完全不同!另外在64位下结果会不一样,所以打印指针老老实实用%p。==