我正在读这本书: C:在一个坚果壳中,在阅读了字符集部分,其中讨论了宽字符后,我写了这个程序:
#include <stdio.h>
#include <stddef.h>
#include <wchar.h>
int main() {
wchar_t wc = '\x3b1';
wprintf(L"%lc\n", wc);
return 0;
}
然后我用gcc编译它,但是gcc给了我这个警告:
main.c:7:15:警告:十六进制转义序列超出范围[默认启用]
程序不输出字符α(其unicode为U + 03B1),这就是我想要的。
如何更改程序以打印字符α?
答案 0 :(得分:6)
这对我有用
#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;
}
答案 1 :(得分:5)
wchar_t wc = L'\x3b1';
是将wchar_t变量初始化为U + 03B1的正确方法。 L前缀用于指定wchar_t文字。您的代码定义了char文字,这就是编译器警告的原因。
在打印时看不到所需字符的事实是由本地环境的控制台设置决定的。
答案 2 :(得分:-1)
尝试L'\x03B1'
它可能只是解决您的问题。如果您有疑问,可以尝试:
'\u03b1' to initialize.