2012-10-21 21 views
7

Czytam książkę: C: W skrócie, a po przeczytaniu sekcję zestawy znaków, który mówi o szerokich znaków, napisałem ten program:Jak zainicjować zmienną wchar_t?

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

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

Następnie skompilowany go za pomocą gcc , ale dał mi ten gcc ostrzeżenie:

main.c: 7: 15: ostrzeżenie: hex sekwencja ucieczki poza zakresem [domyślnie włączona]

Program nie wypisze znaku α (którego kod Unicode to U + 03B1), co właśnie chciałem.

Jak zmienić program, aby wydrukować znak α?

+1

'wchar_t wc = L '\ x03b1';' eliminuje ostrzeżenie, choć nadal nie drukuje alfa. –

+1

To, czego naprawdę chcę, to nie eliminować ostrzeżenia, ale uzyskać właściwą odpowiedź. :-( –

+0

Gdzie drukujesz? Jeśli terminal, z jakim kodowaniem jest twój zestaw terminali do konwersji? –

Odpowiedz

5

Działa to dla mnie

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

To również działa dla mnie. :-) –

+0

Możesz zmienić LC_ALL przez LC_CTYPE (Ta kategoria dotyczy klasyfikacji i konwersji znaków oraz wielobajtowych i szerokich znaków) –

+0

To nie działa w systemie Windows; nazwa locale jest inna, a konsola nie mówi domyślnie w UTF-8. – rubenvb

0

spróbuj L'\x03B1' To może po prostu rozwiązać twój problem. Jeśli masz wątpliwości, możesz spróbować:

'\u03b1' to initialize. 
+0

Nie. Próbowałem tego i to nie działało –

+0

Prowadzące zero nie jest konieczne. Szesnastkowa sekwencja ucieczkowa może zawierać dodatnią liczbę cyfr szesnastkowych: –

+0

@ H2C03 co nie działało Proszę, spróbuj, by być dokładnym: –

5
wchar_t wc = L'\x3b1'; 

jest poprawny sposób inicjalizacji wchar_t zmienną do U + 03B1. Prefiks L służy do określenia literału wchar_t. Twój kod definiuje literę znaków i dlatego kompilator ostrzega.

Fakt, że nie widać pożądanego znaku podczas drukowania, zależy od ustawień konsoli lokalnej.

+0

Emmmm, jak ustawić moją konsolę? –

+1

Mam Nie wiedziałem, o jakim systemie operacyjnym się nie pisze, a także o to nie pytałeś, zapytałeś, jak zainicjować zmienną –

+0

Używam Ubuntu Linux, czy możesz uzyskać odpowiedni wynik na swoim komputerze? Właśnie myślałem, że problem jest spowodowany przez inicjalizację, nigdy wcześniej nie myślałem o środowisku. –

Powiązane problemy