int nKeyWordsLen=lstrlen(StringsBufferTmp);
char* szKeyWordsCht = new char[nKeyWordsLen+1];
ZeroMemory(szKeyWordsCht,nKeyWordsLen+1);

//简体转换到繁体
LCMapString(0x0804,
LCMAP_TRADITIONAL_CHINESE,
StringsBufferTmp,
nKeyWordsLen,
szKeyWordsCht,
nKeyWordsLen+1
);   
1、LPBYTE szKeyWordsAnsiCht = (unsigned char*)szKeyWordsCht;

2、delete [] szKeyWordsCht; 3、return szKeyWordsAnsiCht;
当我走到1的时候,szKeyWordsAnsiCht 有值,但是当走完2以后,3中的szKeyWordsAnsiCht 就时乱码了

解决方案 »

  1.   

    LPBYTE szKeyWordsAnsiCht = (unsigned char*)szKeyWordsCht; 
    这个赋值操作后,szKeyWordsAnsiCht和szKeyWordsCht指向的是同一段缓存.
    szKeyWordsCht释放了,其指向的值是无效值,自然szKeyWordsAnsiCht指向的也是无效值.
      

  2.   

    直接return szKeyWordsCht;   然后在外部用完之后删除
      

  3.   

    请问,如果我在里面定义一个CString,然后暂存下内容,再转成LPBYTE,怎么弄呢?谢谢了~
      

  4.   

    int nKeyWordsLen=lstrlen(StringsBufferTmp);
    char* szKeyWordsCht = new char[nKeyWordsLen+1];
    ZeroMemory(szKeyWordsCht,nKeyWordsLen+1);

    //简体转换到繁体
    LCMapString(0x0804,
    LCMAP_TRADITIONAL_CHINESE,
    StringsBufferTmp,
    nKeyWordsLen,
    szKeyWordsCht,
    nKeyWordsLen+1
    );   
    CString mmmm;
    mmmm.Format("%s",szKeyWordsCht);

    LPBYTE szKeyWordsAnsiCht = (LPBYTE)(LPCSTR)mmmm;/* LPBYTE szKeyWordsAnsiCht = (unsigned char*)szKeyWordsCht;*///  if (ThreadStatus == FALSE)
    //  {
    delete [] szKeyWordsCht;
    /* }*/ return szKeyWordsAnsiCht;
    我这样修改的话,值好像改变了啊,因为最后我想要的结果改变了,请问这是为什么呢?谢谢了!
      

  5.   

    或者怎样将szKeyWordsCht存的字符赋给szKeyWordsAnsiCht呢?
      

  6.   

    memcpy(szKeyWordsAnsiCht, szKeyWordsCht, sizeof(szKeyWordsCht) );
      

  7.   

    我用了8楼的方法,但是弹出对话框,显示:
    “Unhandled exception in ***.exe:0xC0000005:Access Violation”,请问这是为什么呢?谢谢!
      

  8.   


    CHAR *pszAnsi = "简体";
    WCHAR *pwszTemp = NULL;
    CHAR *pszBig5 = NULL;
    int nLen = 0;nLen = MultiByteToWideChar(936, 0, pszAnsi, -1, NULL, 0);
    pwszTemp = new WCHAR[nLen+1];
    pwszTemp[0] = L'\0';
    MultiByteToWideChar(936, 0, lpszAnsi, -1, pwszTemp, nLen);
    nLen = WideCharToMultiByte(950, 0, pwszTemp, -1, NULL, 0, NULL, NULL);
    pszBig5 = new CHAR[nLen+1];
    pszBig5[0] = '\0';
    WideCharToMultiByte(950, 0, pwszTemp, -1, pszBig5, nLen, NULL, NULL);
    delete pwszTemp;delete pszBig5;