慎用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字節  
 

猜你喜欢

转载自blog.csdn.net/qq_35886593/article/details/88855017