所以我要做的就是在我的终端上写日文字符 屏幕使用C和宽字符。
问题是我正在做什么,所以我可以解决它, 在使用宽字符时,我应该注意什么其他警告 你对我正在做什么有任何其他意见吗?
糟糕的代码:
#include <stdio.h>
#include <wchar.h>
int main( ) {
wprintf(L"%c\n", L"\x3074");
}
这不起作用,但我想知道原因。
当我尝试使用wchar_t来保存值时问题会变得更糟:
wchar_t pi_0 = 0x3074; // prints a "t" when used with wprintf
wchar_t pi_1 = "\x3074"; // gives compile time warning
wchar_t pi_2 = L"\x3074"; // gives compile time warning
所以我也想做这项工作,因为我计划拥有数据结构 拿着这些字符的字符串。
谢谢!
答案 0 :(得分:10)
"\x3074"
的类型为const char[]
,L"\x3074"
的类型为const wchar_t[]
。
如果您需要wchar_t
,请使用单引号:
L'\x3074'
同样%c
打印char
,但对于wchar_t
,您需要%lc
。
答案 1 :(得分:4)
代码中至少存在两个问题。
(还假设宽字符集是Unicode - 我似乎记得它总是适用于Linux,但它不是通用的。)
在正确配置的终端中
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main( ) {
setlocale(LC_ALL, "");
wprintf(L"%ls\n", L"\x0152\x3074");
return 0;
}
应该有效。如果没有,我将首先检查setlocale()和wprint()的结果。
(我添加了U + 0152,这是OE连字,所以我可以检查行为;我没有使用U + 3074的字体)