开发者

conversion from char* to wchar_t

I need to convert from char* to wchar. Here is how i am doing.

char * retrunValue= getData();
size_t origsize = strlen(returnValue) + 1;
const size_t newsize = 200;
size_t convertedChars = 0;
wcha开发者_运维问答r_t wcstring[newsize];
mbstowcs_s(&convertedChars, wcstring, origsize, returnValue, _TRUNCATE);
wcscat_s(wcstring, L" (wchar_t *)");

getData() function returns a char* value for example "C:/Documents and Settings" when i tried to print the converted value "wcstring": the value is not correct: it is something like this "C:/Documen9" or something garbage. 1- Please tell me is it safe to convert from char* to wchar in this way, as i am doing 2- How can i get the original value as returned by getData() function

Thanks, Regards

UPDATE:

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);

added this but it says. "argument of type "size_t is incompatible with parameter of type "LPCWSTR" "


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

You're passing the wrong size.


Don't use mbstowcs() for such conversions unless the char* really points to a multibyte string (not every char string is a multibyte string!). It might break when using char values above 127 (e.g. umlauts and other special characters).

As you'd like to concat another string anyway, just use wsprintf():

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

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜