打印wchar\t会产生奇怪的输出

打印wchar\t会产生奇怪的输出,c,printf,wchar-t,format-specifiers,C,Printf,Wchar T,Format Specifiers,运行此代码段: wchar_t *wstr = L"áßå®"; wprintf(L"%s",wstr); 给出输出: « 而不是 ßå® 我是新来的wchar\u t。如何获得预期的输出?我认为,您需要更改代码 wprintf(L"%s",wstr); 到 参考:摘自《标准》第7.29.2.1章第11节 l(ell)指定以下d、i、o、u、x或x转换说明符应用于长整型或无符号长整型参数;以下n个转换说明符应用于指向长整型参数的指针;以下c转换说明符应用于wint_t参数以下s转换说明符应

运行此代码段:

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

«

而不是

ßå®


我是新来的
wchar\u t
。如何获得预期的输出?

我认为,您需要更改代码

 wprintf(L"%s",wstr);

参考:摘自《标准》第7.29.2.1章第11节

l(ell)
指定以下d、i、o、u、x或x转换说明符应用于长整型或无符号长整型参数;以下n个转换说明符应用于指向长整型参数的指针;以下c转换说明符应用于wint_t参数以下
s
转换说明符应用于指向
wchar\t
参数的指针
或对后面的a、a、e、e、f、f、g或g转换说明符没有影响


您的问题是什么?不太确定,但您是否尝试过
%ls
?因为您可以读取wchar的格式是
%ls
而不是
%s
错误的格式说明符会导致未定义的行为。
L“áßå»。编译器不必支持源代码中嵌入的unicode字符。它只需要支持ASCII。尝试将字符串编码为
wchar\u t*wstr=L“\uE1\uDF\uE5”将格式说明符更改为L“%ls”不会导致任何更改。输出仍然为:«
wprintf(L"%ls",wstr);