Question

I am reading the book: C: In a Nutshell, and after reading the section Character Sets, which talks about wide characters, I wrote this program:

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

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

I then compiled it using gcc, but gcc gave me this warning:

main.c:7:15: warning: hex escape sequence out of range [enabled by default]

And the program does not output the character α (whose unicode is U+03B1), which is what I wanted it to do.

How do I change the program to print the character α?

Was it helpful?

Solution

This works for me

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

OTHER TIPS

wchar_t wc = L'\x3b1';

is the correct way to initialise a wchar_t variable to U+03B1. The L prefix is used to specify a wchar_t literal. Your code defines a char literal and that's why the compiler is warning.

The fact that you don't see the desired character when printing is down to your local environment's console settings.

try L'\x03B1' It might just solve your problem. IF you're in doubt you can try :

'\u03b1' to initialize.
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top