格式化_snprintf_s的測試

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章