2015-06-04 9 views
3

Запуск этого фрагмента кода:Печать wchar_t дает странный выход

wchar_t *wstr = L"áßå®"; 
wprintf(L"%s",wstr); 

дает выход:

«

вместо

áßå®

Я новичок в wchar_t. Как получить ожидаемый результат?

+0

Что вы хотите сказать? –

+4

Не очень уверен, но вы попробовали '% ls'? –

+0

Как вы можете прочитать [HERE] (http://www.cplusplus.com/reference/cwchar/wprintf/) формат для wchar is '% ls' not'% s' – LPs

ответ

4

Я считаю, что вам нужно изменить код

wprintf(L"%s",wstr); 

в

wprintf(L"%ls",wstr); 

Ref: От C11 стандарта, глава §7.29.2.1, курсив мой

л (ell)
Указывает, что следующие d, i, o, u, x или X применяется к длинному int или unsigned long int аргументу; что следующий указатель преобразования n применяется к указателю на длинный аргумент int; что следующий спецификатор преобразования c применяется к аргументу wint_t; , что следующий указатель преобразования s применяется к указателю на аргумент wchar_t; или не влияет на следующие спецификации a, A, e, E, f, F, g или G.

+0

Изменение спецификатора формата на L "% ls" не приводит к каким-либо изменениям. Выход остается: « –