当前位置: 代码迷 >> VC >> sscanf_s 数据转换 corrupt解决思路
  详细解决方案

sscanf_s 数据转换 corrupt解决思路

热度:2624   发布时间:2013-02-25 00:00:00.0
sscanf_s 数据转换 corrupt
void CIniOperationDlg::OnBnClickedButScanf()
{

char buffer[]="15 13 14...";

WORD wIDdog;
int i;
//取头两个字节
sscanf_s(buffer,"%2x",&wIDdog);

TRACE("\n wIDDog:%2x",wIDdog);
// sscanf_s(buffer,"%d",&i);

// TRACE("\n i:%4x;",i) ;
}

该该函数执行完后提示
Run-Time Check Failure #2 - Stack around the variable 'wIDdog' was corrupted.

经检查WORD 是两个字节。但WORD 改为 DWORD 后执行没有异常。请问这是为什么???

------解决方案--------------------------------------------------------
sscanf_s(buffer,"%2x",&wIDdog); 里面的"%2x" 对应的是无符号整型数,vc.net默认的是32位,无符号整型数占4个字节,WORD只有两个字节,所以出现了你说的现象。
建议最好用UINT类型,这样可以自动适应编译器的位数。
  相关解决方案