从字符* 转换为 wchar_t

conversion from char* to wchar_t

本文关键字:wchar 转换 字符      更新时间:2023-10-16

我需要从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"类型的参数不兼容"

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

您传递了错误的尺寸。

不要使用 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);