今天在练习C中的sprintf函数时遇到一个小问题,望得到大家的解答,代码及问题如下:
测试代码如下:
void main(void)
{
char charArr[10];
short si = -1;
sprintf(charArr, "%04X", si);
printf("%s\n", charArr); // "FFFFFFFF"
printf("si = %i\n", si); // "si = -1"
sprintf(charArr, "%016X", si);
printf("%s\n", charArr); // "00000000FFFFFFFF"
printf("si = %i\n", si); // "si = -256"
}
问题:为何最后一行会输出-256?而不是-1?
当我把charArr大小改为大于16后可以得到“正确”的-1,难倒这里的sprintf(charArr, "%016X", si);会改变si的值吗????底层究竟是怎么实现的?望好心人解答,谢谢!!!!