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