如何初始化wchar_t变量?

时间:2012-10-21 08:06:45

标签: c gcc unicode 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;
}

然后我用gcc编译它,但是gcc给了我这个警告:

  

main.c:7:15:警告:十六进制转义序列超出范围[默认启用]

程序不输出字符α(其unicode为U + 03B1),这就是我想要的。

如何更改程序以打印字符α?

3 个答案:

答案 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.