如何初始化wchar_t变量?

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

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

Dav*_*eri 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;
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用setlocale(LC_ALL,“”)`来使用在执行环境中配置的语言环境,无论是Linux还是Windows。 (2认同)

Dav*_*nan 5

wchar_t wc = L'\x3b1';
Run Code Online (Sandbox Code Playgroud)

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

打印时看不到所需字符的事实是由本地环境的控制台设置决定的.