慎用sscanf、swscanf

常見錯誤用法:
  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字節   

你可能感兴趣的:(VC++)