由于出现了这种错误,所以我写了些代码测试_snprintf_s的格式化规则
(windows下),比如以下代码
char buff[256]={0};
unsigned int a=5,b=9,d=10;//32位
unsigned char ch=5,ch1=3;//8位
unsigned short sh=7;//16位
unsigned __int64 c=6;//64位
_snprintf_s(buff,255,"%llu",ch,ch1,ch,ch1,b);
cout<<buff<<endl;
输出结果并不是像我预期的那样把ch,ch1,ch,ch1,b总共64位输出来也
就是
buff = ch的8位二进制前面补零+ch1的8位二进制前面补零+ch的8位二
进制前面补零
+ch1的8位二进制前面补零+b的32位二进制前面补零
而输出结果是12884901893,其二进制形式是
1100000000000000000000000000000101,也就是说只取了前面ch和ch1
而且把它们不足32位的补零成了32位,为此我再更改了代码测试了一
番
_snprintf_s(buff,255,"%llu",ch,sh);
输出结果是30064771077,其二进制是
11100000000000000000000000000000101,也是把16位的sh和8位的ch
补零成32位的而且格式化的顺序是从右到左的顺序
以上是在windows下vs05测试得出来的结果,linux下还待测试