下面程序从一个对话框里获取一段数字存放 Buffer2_4,然后和 szBuf_2_0 连接。最后将Buffer2_4转换为BYTE buf={0x0f,0x11} 这种类型。 程序编译没有问题,但程序运行就非法操作。哪位给指点一下啊。TCHAR *Buffer2_4=(TCHAR*)malloc(sizeof(TCHAR)*100);
GetWindowText (GetDlgItem(hDlg,IDC_EDIT2),Buffer2_4,9);
TCHAR *szBuf_2_0="123456123456123456123456";
strcat_s(Buffer2_4,sizeof(TCHAR)*200,szBuf_2_0);
TCHAR *sTempBuf = NULL;
int len = strlen(Buffer2_4);
BYTE Buf[40] = {0};
int a = 0;
for(int i = 0;i < len;i++)
{

sTempBuf = &Buffer2_4[i];
a=strtol(sTempBuf,&sTempBuf+1,16); Buf[i] = a;
}
Buf[len] = '\0';

解决方案 »

  1.   

    strcat_s(Buffer2_4,sizeof(TCHAR)*200,szBuf_2_0);
    越界了
      

  2.   

        a=strtol(sTempBuf,&sTempBuf+1,16);
    改成下面这样试试:
        a=strtol(sTempBuf,sTempBuf+1,16);
      

  3.   

    TCHAR *Buffer2_4=(TCHAR*)malloc(sizeof(TCHAR)*100);
    GetWindowText (GetDlgItem(hDlg,IDC_EDIT2),Buffer2_4,9);    
    strcpy(Buffer2_4,"123");
    TCHAR *szBuf_2_0="123456123456123456123456";
    strcat_s(Buffer2_4,sizeof(TCHAR)*200,szBuf_2_0); //复制越界
    TCHAR sTempBuf[sizeof(TCHAR) + 1];
    int len = strlen(Buffer2_4);
    BYTE Buf[40] = {0};
    for(int i = 0;i < len;i++)
    {

    strncpy(sTempBuf,&Buffer2_4[i],sizeof(TCHAR));
    sTempBuf[sizeof(TCHAR)] = 0;
    Buf[i]=strtoul(sTempBuf,NULL,16);
    }    Buf[len] = '\0';