wcstombs char*转wchar_t*的问题

qq544464298 2010-01-25 07:52:05
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"呢?
...全文
254 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq544464298 2010-01-25
  • 打赏
  • 举报
回复
谢谢各位,我找到解决办法了,发上来共享一下,方便其它朋友,可能不太标准,但确实解决了我的问题



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";
marrco2005 2010-01-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xiaoji9981 的回复:]
不知道别乱讲啊,我除外

前面需要设置一下本地语言

setlocale( LC_ALL, "Chinese-simplified" );



setlocale( LC_ALL, NULL );
[/Quote]
楼主那个明显是内存越界了,和字符集一点都不搭界的
xiaoji 2010-01-25
  • 打赏
  • 举报
回复
不知道别乱讲啊,我除外

前面需要设置一下本地语言

setlocale( LC_ALL, "Chinese-simplified" );



setlocale( LC_ALL, NULL );
marrco2005 2010-01-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qq544464298 的回复:]
楼上两位朋友的方法都试过了,还是一样
[/Quote]

这是 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);
qq544464298 2010-01-25
  • 打赏
  • 举报
回复
楼上两位朋友的方法都试过了,还是一样
marrco2005 2010-01-25
  • 打赏
  • 举报
回复
v_char_user=new char;
v_wchar_user=new wchar_t;
你这两句都只分配了一个字符的空间,却要向这里放字符串,数据写越界了
marrco2005 2010-01-25
  • 打赏
  • 举报
回复
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 ?"
IcyPlayer 2010-01-25
  • 打赏
  • 举报
回复
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);

IcyPlayer 2010-01-25
  • 打赏
  • 举报
回复
WideCharToMultiByte  WideCharToMultiByte
  函数功能:该函数映射一个unicode字符串到一个多字节字符串。
  函数原型:int WideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPWSTR lpWideCharStr, int cchWideChar, LPCSTR lpMultiByteStr, int cchMultiByte, LPCSTR lpDefaultChar, PBOOL pfUsedDefaultChar );

wcstombs要设置本地语言,不太熟

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧