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类型,这样可以自动适应编译器的位数。