由於出現了這種錯誤,所以我寫了些代碼測試_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下還待測試