+ -
当前位置:首页 → 问答吧 → VC 错误ASSERT(nFirst+nCount<=GetData()->nDataLength);

VC 错误ASSERT(nFirst+nCount<=GetData()->nDataLength);

时间:2011-11-18

来源:互联网

CString str = "01 02 03 04 0A 0B 0C 0D";
  BYTE bTemp[8]={0};
  for(int i=0;i<8;i++){
  ssacanf(str.Mid(i*3),"%x",&bTemp[i]);
  } 
  我要将文本框中的字符串数据01 02 03 04 0A 0B 0C 0D 转化为BYTE 数组,如上。
  运行出现错误,调试到bTemp[6]时跳到CString类的ASSERT(nFirst+nCount<=GetData()->nDataLength);下。
请问怎么回事?明显没有越界。这个GetData()->nDataLength是字符串的长度么?

作者: a379039233   发布时间: 2011-11-18

高人呢? 哎

作者: a379039233   发布时间: 2011-11-22

C/C++ code
    CString str = "01 02 03 04 0A 0B 0C 0D";
    BYTE bTemp[18]={0};
    int i;
    for(i=0;i<8;i++)
    {
        sscanf( str.Mid( i * 3 ),"%x",&bTemp[i]);
    }  


sscanf输入的是一个16进制数,%x就是表示输入一个16进制形式的整数,占用4个字节,所以当输入到0a的时候就占满了,输入0b的时候自然会出错,把bTemp加大就正确了。

作者: jennyvenus   发布时间: 2011-11-24

CString str = "01 02 03 04 0A 0B 0C 0D";
  BYTE bTemp[8]={0};
sscanf(str,"%x%x%x%x%x%x%x%x",&bTemp[0],&bTemp[1],&bTemp[2],&bTemp[3],&bTemp[4],&bTemp[5],&bTemp[6],&bTemp[7]);

作者: gameslq   发布时间: 2011-11-27