最近在使用sprintf的时候,发现char TEST=130的时候,调用sprintf(temp, "%X", TEST)打印出来的是FFFFFF82,立刻就莫名其妙了,后来找到了原因,特记录下。
因为spritnf 是个变参函数,除了前面两个参数之外,后面的参数都不是类型安全的,函数更没有办法仅仅通过一个“%X”就能得知当初函数调用前参数压栈时被压进来的到底是个4 字节的整数还是个2 字节的短整数,所以采取了统一4
字节的处理方式,导致参数压栈时做了符号扩展,扩展成了32 位的整数-1,打印时4 个位置不够了,就把32 位整数-1 的8 位16 进制都打印出来了。
本文探讨了使用sprintf函数时遇到的一个特殊现象:当输入特定数值时,打印结果不符合预期。文章详细解释了这一现象背后的原因——类型转换及符号扩展,并阐述了如何避免此类问题。

被折叠的 条评论
为什么被折叠?



