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"呢?
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"呢?
函数功能:该函数映射一个unicode字符串到一个多字节字符串。
函数原型:int WideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPWSTR lpWideCharStr, int cchWideChar, LPCSTR lpMultiByteStr, int cchMultiByte, LPCSTR lpDefaultChar, PBOOL pfUsedDefaultChar );wcstombs要设置本地语言,不太熟
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);
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 ?"
v_wchar_user=new wchar_t;
你这两句都只分配了一个字符的空间,却要向这里放字符串,数据写越界了
这是 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);
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";