преобразование из char * в wchar_t - PullRequest
1 голос
/ 07 мая 2011

Мне нужно конвертировать из 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 ]

5 голосов
/ 07 мая 2011
mbstowcs_s(&convertedChars, wcstring, newsize, returnValue, _TRUNCATE);
                                      ^^^

Вы передаете неправильный размер.

3 голосов
/ 07 мая 2011

Не используйте mbstowcs() для таких преобразований, если char* действительно не указывает на многобайтовую строку (не каждая строка char является многобайтовой строкой!).Он может сломаться при использовании char значений выше 127 (например, умляутов и других специальных символов).

Если вы все равно хотите объединить другую строку, просто используйте wsprintf():

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

// GCC
wsprintf(wcstring, newsize, L"%ls (wchar_t *)", returnValue);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...