问题
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 α?
回答1:
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;
}
回答2:
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.
回答3:
try L'\x03B1'
It might just solve your problem. IF you're in doubt you can try :
'\u03b1' to initialize.
来源:https://stackoverflow.com/questions/12996062/how-to-initialize-a-wchar-t-variable