首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

今天在练习C中的sprintf函数时遇到一个小疑点,望得到大家的解答,代码及有关问题如上

2012-08-15 
今天在练习C中的sprintf函数时遇到一个小问题,望得到大家的解答,代码及问题如下:测试代码如下:void main(v

今天在练习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
[解决办法]
核心已转储

热点排行