2012-10-21 15 views
7

Sto leggendo il libro: C: In a Nutshell, e dopo aver letto la sezione Set di caratteri, che parla caratteri circa di larghezza, ho scritto questo programma:Come inizializzare una variabile wchar_t?

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

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

ho poi compilato utilizzando gcc , ma gcc mi ha dato questo avvertimento:

main.c: 7: 15: avvertimento: hex sequenza di escape fuori intervallo [abilitato per impostazione predefinita]

E il programma non emette il carattere α (il cui unicode è U + 03B1), che è quello che volevo che facesse.

Come si modifica il programma per stampare il carattere α?

+1

'wchar_t wc = L '\ x03b1';' elimina l'avvertimento, anche se ancora non stampa un alfa. –

+1

Quello che voglio veramente non è eliminare l'avviso, ma ottenere la risposta giusta. :-( –

+0

Dove stai stampando? Se un terminale, quale codifica è il tuo terminale impostato per convertire da? –

risposta

5

questo funziona per 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; 
} 
+1

Anche questo funziona per me. :-) –

+0

È possibile modificare LC_ALL di LC_CTYPE (questa categoria si applica alla classificazione e conversione di caratteri e ai caratteri multibyte e wide) –

+0

Questo non funziona su Windows; il nome della locale è diverso e la console non parla UTF-8 per impostazione predefinita. – rubenvb

0

provare L'\x03B1' Potrebbe risolvere il tuo problema. Se siete in dubbio, si può provare:

'\u03b1' to initialize. 
+0

No. Ho provato questo e questo non ha funzionato –

+0

Lo zero iniziale non è necessario. Una sequenza esadecimale di escape può contiene qualsiasi numero positivo di cifre esadecimali –

+0

@ H2C03 cosa non ha funzionato, per favore cerca di essere preciso –

5
wchar_t wc = L'\x3b1'; 

è il modo corretto per inizializzare una variabile wchar_t a U + 03B1. Il prefisso L viene utilizzato per specificare un valore letterale wchar_t. Il tuo codice definisce un carattere letterale ed è per questo che il compilatore avverte.

Il fatto che non si visualizzi il carattere desiderato durante la stampa dipende dalle impostazioni della console dell'ambiente locale.

+0

Emmmm, come impostare la mia console? –

+1

Ho non hai idea, non hai indicato quale sistema operativo stai utilizzando, ma non l'hai mai chiesto, hai chiesto come inizializzare la variabile –

+0

Sto usando Ubuntu Linux, puoi ottenere il risultato giusto sul tuo computer? Stavo solo pensando che il problema è causato dall'inizializzazione, non ho mai pensato prima all'ambiente. –