本帖最后由 lfs09 于 2014-02-24 11:00:50 编辑

解决方案 »

  1.   

    利用WideCharToMultiByte(..., NULL, 0);的返回值来分配你的BUFFER
      

  2.   

    字符串的内存长度是 STRLEN(S)+sizeof(TCHAR),在Unicode下,以00为结尾,因此必须比其长度多+sizeof(TCHAR)个字节
      

  3.   

    代码本来就是按你说的那样运行执行的,结果却出错了.
    那为什么,当传进去的buffer内容比较多的时候,不需要再额外加2也不报错
      

  4.   

    比如 char UTF8Buf[100]="12";
    然后调用 UTF8ToAnsi(UTF8Buf,UTF8Buf,sizeof(UTF8Buf));
      

  5.   

     wchar_t *tempBuf=new wchar_t[len];
        ZeroMemory(tempBuf,sizeof(tempBuf)); // 这里错了,如果你的len长度小于4的话,那么你的ZeroMemory()肯定是错误的。--》
    ZeroMeory(tempBuf, sizeof(char)*len);
      

  6.   

    你的代码中wchar_t *tempBuf=new wchar_t[len];动态分配的数组内存,释放的时候是不能直接的delete tempBuf;正确的释放方法是:delete [] tempBuf;下面的函数也是一样