Yis*_*ang 8 c unicode gcc wchar-t
我正在读这本书:C:在一个坚果壳中,在阅读了关于宽字符的字符集部分之后,我写了这个程序:
#include <stdio.h>
#include <stddef.h>
#include <wchar.h>
int main() {
wchar_t wc = '\x3b1';
wprintf(L"%lc\n", wc);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后我用gcc编译它,但是gcc给了我这个警告:
main.c:7:15:警告:十六进制转义序列超出范围[默认启用]
并且程序不输出字符α(其unicode为U + 03B1),这是我想要它做的.
如何更改程序以打印字符α?
这适合我
#include <stdio.h>
#include <stddef.h>
#include <wchar.h>
#include <locale.h>
int main(void) {
wchar_t wc = L'\x3b1';
setlocale(LC_ALL, "en_US.UTF-8");
wprintf(L"%lc\n", wc);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
wchar_t wc = L'\x3b1';
Run Code Online (Sandbox Code Playgroud)
是将wchar_t变量初始化为U + 03B1的正确方法.L前缀用于指定wchar_t文字.您的代码定义了char文字,这就是编译器警告的原因.
打印时看不到所需字符的事实是由本地环境的控制台设置决定的.