常見錯誤用法:
byte arg;
swscanf(_T("100"),_T("%d"), &arg);
INT8 arg;
swscanf(_T("100"),_T("%d"), &arg);
INT16 arg;
swscanf(_T("100"),_T("%d"), &arg);
以上三種用法會出現內存越界,從而可能導致程序崩潰,請看下面一段測試代碼:
byte buff[10];
//此處將buff全部設置成0xFF
memset(buff,0xFF,sizeof(buff));
//執行前buff內數據為:{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}
swscanf(_T("100"),_T("%d"), buff);
//執行後buff內數據為:{0x64,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}
原因在於格式化符“d”佔用4字節,所以會出現越界情況。
%d 佔用4字節
%hd 佔用2字節