从char *转换为wchar_t

时间:2011-05-07 09:46:28

标签: c++ winapi

我需要从char *转换为wchar。 这是我的工作方式。

char * retrunValue= getData();
size_t origsize = strlen(returnValue) + 1;
const size_t newsize = 200;
size_t convertedChars = 0;
wchar_t wcstring[newsize];
mbstowcs_s(&convertedChars, wcstring, origsize, returnValue, _TRUNCATE);
wcscat_s(wcstring, L" (wchar_t *)");

getData()函数返回一个char *值,例如“C:/ Documents and Settings” 当我试图打印转换后的值“wcstring”时:值不正确:它就像这样的“C:/ Documen9”或垃圾。 1-请告诉我以这种方式将char *转换为wchar是安全的,正如我所做的那样 2-如何获取getData()函数返回的原始值

谢谢, 此致

更新:

size_t origsize = strlen(returnValue) + 1;
const size_t newsize = 200;
size_t convertedChars = 0;
wchar_t wcstring[newsize];
wsprintf(wcstring, newsize, L"%S (wchar_t *)", returnValue);

添加了这个,但它说。 “类型为”size_t的参数与“LPCWSTR”类型的参数“

不兼容

2 个答案:

答案 0 :(得分:5)

mbstowcs_s(&convertedChars, wcstring, newsize, returnValue, _TRUNCATE);
                                      ^^^

你的身材错误。

答案 1 :(得分:3)

不要使用mbstowcs()进行此类转换,除非char*确实指向多字节字符串(并非每个char字符串都是多字节字符串!)。使用大于127的char值时可能会中断(例如变音符号和其他特殊字符)。

无论如何你想要连接另一个字符串,只需使用wsprintf()

// Visual Studio
wsprintf(wcstring, newsize, L"%S (wchar_t *)", returnValue);

// GCC
wsprintf(wcstring, newsize, L"%ls (wchar_t *)", returnValue);