Die Anzeige wide chars mit printf

Ich versuche zu verstehen wie funktioniert printf Arbeit mit wide-Zeichen (wchar_t).

Habe ich den folgenden code-Beispiele :

Beispiel 1 :

#include <stdio.h>
#include <stdlib.h>

int     main(void)
{
    wchar_t     *s;

    s = (wchar_t *)malloc(sizeof(wchar_t) * 2);
    s[0] = 42;
    s[1] = 0;
    printf("%ls\n", s);
    free(s);
    return (0);
}

Ausgabe :

*

Alles ist in Ordnung hier : mein Charakter (*) wird korrekt angezeigt.

Beispiel 2 :

Wollte ich die Anzeige einer anderen Art von Charakter. Auf meinem system wchar_t scheinen codiert auf 4 bytes. So habe ich versucht, zeigen die folgenden Charakter :
É

#include <stdio.h>
#include <stdlib.h>

int     main(void)
{
    wchar_t     *s;

    s = (wchar_t *)malloc(sizeof(wchar_t) * 2);
    s[0] = 0xC389;
    s[1] = 0;
    printf("%ls\n", s);
    free(s);
    return (0);
}

Aber es gibt keine Ausgabe in dieser Zeit versuchte ich mit vielen Werten aus dem "encoding" - Abschnitt (cf. vorherigen link) für s[0] (0xC389, 201, 0xC9)... Aber ich bekomme nie die É Zeichen angezeigt. Ich habe auch versucht mit %S statt %ls.

Wenn ich versuche zu nennen printf wie diese : printf("<%ls>\n", s) das einzige Zeichen, das gedruckt wird, ist '<' wird, wird die Anzeige abgeschnitten.

Warum ich dieses problem haben? Wie sollte ich das tun?

  • Gibt es einen Grund, die Sie zuordnen, dynamisch statt deklarieren ein array mit zwei Elementen?
  • Versuchen Lesung mit scanf("%1ls") eine "É" und berichten, was Wert für printf("%lX\n", (unsigned long) s[0]) Sie bekommen.
  • printf("%ld\n", (unsigned long int) L'É'); gibt mir 201.
  • Schlage vor, das Ergebnis von "Lesen mit scanf("%1ls") ein "É". Ihr Kommentar berichtet, was der source-code, der denkt, dass ein 'É' ist. Wir sind daran interessiert, wie der code verarbeitet die I/O, die möglicherweise unterscheiden sich in Zeichen-Kodierung.
  • Auf meinem system ist, ist der Rückgabewert von scanf("%1ls", s); -1 (s[0] nicht festgelegt) unterstützt, stackoverflow.com/a/40600658/2410359
InformationsquelleAutor vmonteco | 2016-11-14
Schreibe einen Kommentar