读书人

今天在练习C中的sprintf函数时遇到一个

发布时间: 2012-08-15 16:57:16 作者: rapoo

今天在练习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的值吗????底层究竟是怎么实现的?望好心人解答,谢谢!!!!

[解决办法]
%i输出的是整型int,从short获取-1,会自动转换为int,截取si十六位,其余补零
[解决办法]
因为16位的字符串越界了,修改了si
[解决办法]
核心已转储

读书人网 >C语言

热点推荐