我正在尝试打印出 wchar_t* 字符串。
代码如下:
#include <stdio.h>
#include <string.h>
#include <wchar.h>
char *ascii_ = "中日友好"; //line-1
wchar_t *wchar_ = L"中日友好"; //line-2
int main()
{
printf("ascii_: %s\n", ascii_); //line-3
wprintf(L"wchar_: %s\n", wchar_); //line-4
return 0;
}
//Output
ascii_: 中日友好
问题:
最佳答案
首先,在源代码中使用非 ASCII 字符通常不是一个好主意。可能发生的情况是中文字符被编码为 UTF-8,可与 ascii 一起使用。
现在,至于为什么 wprintf()
不起作用。这与流方向有关。每个流只能设置为正常或宽。一旦设置,就无法更改。首次使用时设置。 (由于 printf
是 ascii )。之后 wprintf
由于方向不正确而无法工作。
换句话说,一旦您使用printf()
,就需要继续使用printf()
。同样,如果您从 wprintf()
开始,则需要继续使用 wprintf()
。
您不能混合使用 printf()
和 wprintf()
。 (Windows 除外)
编辑:
回答关于为什么 wprintf
行本身不起作用的问题。可能是因为正在编译代码,所以将 中日友好
的 UTF-8 格式存储到 wchar_
中。但是,wchar_t
需要 4 字节的 unicode 编码。 (在 Windows 中为 2 字节)
所以我能想到的有两种选择:
wchar_t
,只要坚持使用多字节 char
即可。这是一种简单的方法,但如果用户的系统未设置为中文语言环境,则可能会中断。 wchar_t
,但您需要使用 unicode 转义序列对中文字符进行编码。这显然会使它在源代码中不可读,但它可以在任何可以打印汉字字体的机器上工作,而不管语言环境如何。 关于char vs wchar_t,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7496203/