慎用sscanf、swscanf

本文介紹了使用 swscanf 函數時的常見錯誤用法,特別是當使用不符合數據類型的格式化符號時可能導致的內存越界問題。通過具體例子展示了 byte、INT8 和 INT16 類型變量使用 %d 佔位符讀取數字所產生的錯誤及後果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常見錯誤用法:
 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字節  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值