慎用sscanf、swscanf

31 篇文章 0 订阅
2 篇文章 0 订阅

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值