v_char_user=new char;
v_wchar_user=new wchar_t;
int int_user,i;
int_user=m_edit_user.GetWindowText(v_wchar_user,1024);  执行这句后 v_wchar_user="abcde"  int_user=5
i = wcstombs(v_char_user,v_wchar_user,int_user);        执行这句后 v_char_user="abcde         ?"怎么让v_char_user="abcde"呢?

解决方案 »

  1.   

    WideCharToMultiByte  WideCharToMultiByte
      函数功能:该函数映射一个unicode字符串到一个多字节字符串。
      函数原型:int WideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPWSTR lpWideCharStr, int cchWideChar, LPCSTR lpMultiByteStr, int cchMultiByte, LPCSTR lpDefaultChar, PBOOL pfUsedDefaultChar );wcstombs要设置本地语言,不太熟
      

  2.   

    wchar_t* pwszUnicode = "Unicode! "; 
    int iSize; 
    char* pszMultiByte; iSize = WideCharToMultiByte(CP_ACP, 0, pwszUnicode, -1, NULL, 0, NULL, NULL); 
    pszMultiByte = (char*)malloc((iSize+1)/**sizeof(char)*/); 
    WideCharToMultiByte(CP_ACP, 0, pwszUnicode, -1, pszMultiByte, iSize, NULL, NULL); 
      

  3.   

    v_char_user=new char[256];
    v_wchar_user=new wchar_t[256];
    int int_user,i;
    ::ZeroMemory( v_char_user, sizeof(v_char_user) );
    ZeroMemory( v_wchar_user, sizeof(v_wchar_user) );
    int_user=m_edit_user.GetWindowText(v_wchar_user,1024);  执行这句后 v_wchar_user="abcde"  int_user=5
    i = wcstombs(v_char_user,v_wchar_user,int_user);        执行这句后 v_char_user="abcde        ?"
      

  4.   

    v_char_user=new char;
    v_wchar_user=new wchar_t; 
    你这两句都只分配了一个字符的空间,却要向这里放字符串,数据写越界了
      

  5.   


    这是 MSDN 上的例子,你自己对照一下吧
    size_t  count;
        char    *pMBBuffer = (char *)malloc( BUFFER_SIZE );
        wchar_t *pWCBuffer = L"Hello, world.";    printf("Convert wide-character string:\n" );    count = wcstombs(pMBBuffer, pWCBuffer, BUFFER_SIZE ); // C4996
        // Note: wcstombs is deprecated; consider using wcstombs_s instead
        printf("   Characters converted: %u\n",
                count );
        printf("    Multibyte character: %s\n\n",
               pMBBuffer );    free(pMBBuffer);
      

  6.   

    不知道别乱讲啊,我除外前面需要设置一下本地语言setlocale( LC_ALL, "Chinese-simplified" ); 或setlocale( LC_ALL, NULL ); 
      

  7.   

    谢谢各位,我找到解决办法了,发上来共享一下,方便其它朋友,可能不太标准,但确实解决了我的问题v_char_user=new char; 
    v_wchar_user=new wchar_t; 
    int int_user,i; 
    int_user=m_edit_user.GetWindowText(v_wchar_user,1024);  执行这句后 v_wchar_user="abcde"  int_user=5 
    i = wcstombs(v_char_user,v_wchar_user,int_user);        执行这句后 v_char_user="abcde        ?" 加一句 v_char_user[length]="\0";