Как инициализировать переменную wchar t?

Я читаю книги: C: в двух словах, а после прочтения раздела Наборы Символов, который говорит о широких символах, я написал эту программу:

#include <stdio.h>
#include <stddef.h>
#include <wchar.h>

int main() {
  wchar_t wc = 'x3b1';
  wprintf(L"%lcn", wc);
  return 0;
}

затем я скомпилировал его с помощью gcc, но gcc дал мне это предупреждение:

main.c: 7: 15: warning: hex escape sequence out of range [включено по умолчанию]

и программа не выводит символ α (чей Юникод U + 03B1), который является тем, что я хотел это сделать.

Как изменить программу для печати символа α?

3 ответов


это работает для меня

#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;
}

wchar_t wc = L'\x3b1';

- это правильный способ инициализации переменной wchar_t в U+03B1. Префикс L используется для указания литерала wchar_t. Ваш код определяет литерал char, и поэтому компилятор предупреждает.

тот факт, что вы не видите нужный символ при печати, зависит от настроек консоли локальной среды.


попробовать L'\x03B1' это может решить вашу проблему. Если вы сомневаетесь, вы можете попробовать :

'\u03b1' to initialize.