2012-10-21 18 views
7

Ich lese das Buch: C: In aller Kürze, und nach dem Abschnitt Zeichen Sets Lesen, die über breite Zeichen spricht, schrieb ich dieses Programm:Wie initialisiert man eine Variable wchar_t?

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

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

ich es dann mit gcc kompiliert , aber gcc gab mir diese Warnung:

main.c: 7: 15: Warnung: hex Escape-Sequenz außerhalb des Bereichs [standardmäßig aktiviert]

Und das Programm gibt nicht das Zeichen α aus (dessen Unicode U + 03B1 ist), was ich wollte.

Wie ändere ich das Programm, um das Zeichen α zu drucken?

+1

'wchar_t wc = L '\ x03b1';' beseitigt die Warnung, obwohl es noch nicht ein Alpha druckt. –

+1

Was ich eigentlich will, ist nicht die Warnung zu beseitigen, sondern die richtige Antwort zu bekommen. :-( –

+0

Wohin drucken Sie? Wenn ein Terminal, welche Kodierung ist Ihr Terminal zu konvertieren von? –

Antwort

5

funktioniert für mich

#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

Das funktioniert auch für mich. :-) –

+0

Sie können LC_ALL durch LC_CTYPE ändern (Diese Kategorie gilt für die Klassifizierung und Konvertierung von Zeichen und Multibyte und breite Zeichen) –

+0

Dies funktioniert nicht unter Windows; Der Gebietsschema-Name ist anders und die Konsole spricht standardmäßig nicht UTF-8. – rubenvb

0

versuchen L'\x03B1' Es könnte nur Ihr Problem lösen. Wenn Sie im Zweifel sind, können Sie versuchen:

'\u03b1' to initialize. 
+0

Nein. Ich versuchte dies und das hat nicht funktioniert. –

+0

Die führende Null ist nicht notwendig. Eine hexadezimale Escape-Sequenz kann eine positive Anzahl von Hexadezimalziffern enthalten –

+0

@ H2C03 was nicht funktioniert Bitte versuchen Sie es genau zu sein –

5
wchar_t wc = L'\x3b1'; 

der richtige Weg ist, eine wchar_t Variable U + 03B1 zu initialisieren. Das L-Präfix wird verwendet, um ein wchar_t-Literal anzugeben. Ihr Code definiert ein Char-Literal und deshalb warnt der Compiler.

Die Tatsache, dass das gewünschte Zeichen beim Drucken nicht angezeigt wird, hängt von den Konsoleneinstellungen Ihrer lokalen Umgebung ab. Diese

+0

Emmmm, wie setze ich meine Konsole? –

+1

Ich habe Keine Ahnung, Sie haben nicht angegeben, auf welchem ​​Betriebssystem Sie arbeiten, und Sie haben nicht danach gefragt, sondern Sie haben gefragt, wie Sie die Variable initialisieren können: –

+0

Ich benutze Ubuntu Linux, können Sie das richtige Ergebnis auf Ihrem Computer bekommen? Ich dachte nur, dass das Problem durch die Initialisierung verursacht wird, ich habe noch nie über die Umgebung nachgedacht. –

Verwandte Themen