10

我正在阅读这本书:C: In a Nutshell,在阅读了讨论宽字符的字符集部分之后,我编写了这个程序:

#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),这是我想要它做的。

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

4

3 回答 3

7
wchar_t wc = L'\x3b1';

是将 wchar_t 变量初始化为 U+03B1 的正确方法。L 前缀用于指定 wchar_t 文字。您的代码定义了一个 char 文字,这就是编译器发出警告的原因。

打印时看不到所需字符的事实取决于本地环境的控制台设置。

于 2012-10-21T08:19:13.007 回答
7

这对我有用

#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;
}
于 2012-10-21T09:00:35.343 回答
-1

试试L'\x03B1'它可能只是解决你的问题。如果您有疑问,可以尝试:

'\u03b1' to initialize.
于 2012-10-21T08:16:10.297 回答