我需要从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”类型的参数“
不兼容答案 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);