wprintf(3)

BEZEICHNUNG
wprintf, fwprintf, swprintf, vwprintf, vfwprintf, vswprintf - Umwandlung der Ausgabe formatierter weiter Zeichen

BIBLIOTHEK
Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT
#include <stdio.h>
#include <wchar.h>

int wprintf(const wchar_t *restrict format, …);
int fwprintf(FILE *restrict datenstrom,
             const wchar_t *restrict format, …);
int swprintf(wchar_t wzz[restrict .maxlänge], size_t maxlänge,
             const wchar_t *restrict format, …);

int vwprintf(const wchar_t *restrict format, va_list arg);
int vfwprintf(FILE *restrict datenstrom,
             const wchar_t *restrict format, va_list arg);
int vswprintf(wchar_t wzz[restrict .maxlänge], size_t maxlänge,
             const wchar_t *restrict format, va_list arg);

    Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)):

Alle oben aufgeführten Funktionen:
    _XOPEN_SOURCE >= 500 || _ISOC99_SOURCE
        || _POSIX_C_SOURCE >= 200112L

BESCHREIBUNG
Die wprintf()-Funktionsfamilie ist die Variante der printf()-Funktionsfamilie für weite Zeichen. Sie erzeugen eine formatierte Ausgabe von weiten Zeichen. (Bei weiten Zeichen wird jedes Zeichen in einem wchar_t gespeichert und nimmt daher mehr als nur ein Byte ein.)

Die Funktionen wprintf() und vwprintf() geben weite Zeichen auf stdout aus. Dazu darf stdout nicht byteorientiert sein (siehe die Funktion fwide(3) für weitere Informationen).

Die Funktionen fwprintf() und vfwprintf() geben weite Zeichen auf datenstrom aus. Dazu darf datenstrom nicht byteorientiert sein (siehe die Funktion fwide(3) für weitere Informationen).

Die Funktionen swprintf() und vswprintf() schreiben ihre Ausgabe in ein Feld von wchar_t. Der Programmierer muss sicherstellen, dass in wzz mindestens für maxlänge wchar_t Platz vorhanden ist.

Diese Funktionen entsprechen printf(3), vprintf(3), fprintf(3), vfprintf(3), snprintf(3) und vsprintf(3) mit den folgenden Unterschieden:

•   Die Zeichenkette format besteht aus weiten Zeichen.

•   Die Ausgabe besteht aus weiten Zeichen und nicht aus Bytes.

•   swprintf() und vswprintf() verwenden ein Argument maxlänge, sprintf(3) und vsprintf(3) jedoch nicht. snprintf(3) und vsnprint(3) verwenden ebenfalls das Argument maxlänge, doch diese Funktionen geben unter Linux im Falle eines Pufferüberlaufs (buffer overflow) nicht -1 zurück.

Die Behandlung der Konvertierungszeichen c und s unterscheidet sich:

c   Wenn kein l-Modifikator vorhanden ist, wird das int-Argument durch die Funktion btowc(3) in ein wchar_t umgewandelt und dieses wird geschrieben. Ist ein I-Modifikator vorhanden, wird das Argument wint_t (ein weites Zeichen) geschrieben.

s   Wenn kein Modifikator l vorhanden ist: Vom const char *-Argument wird erwartet, dass es ein Zeiger auf ein Feld von Zeichen (Zeiger auf eine Zeichenkette) ist, die eine Folge aus Multibyte-Zeichen enthält, beginnend im ursprünglichen Schiebezustand. Zeichen aus dem Feld werden in weite Zeichen umgewandelt. Für jedes Zeichen wird die Funktion mbrtowc(3) aufgerufen; jedesmal mit einem Konvertierungszustand, der bei dem Anfangszustand vor dem ersten Byte beginnt. Die weiten Zeichen werden bis zum abschließenden weiten Nullzeichen (L'\0') (aber nicht inklusive) geschrieben. Wird eine Genauigkeit angegeben, so werden nicht mehr weite Zeichen als die angegebene Anzahl geschrieben. Beachten Sie, dass die Genauigkeit die Anzahl der geschriebenen weiten Zeichen und nicht die Anzahl der Bytes oder Zeichenpositionen auf dem Bildschirm bezeichnet. Das Feld muss ein abschließendes Nullbyte (»\0«) enthalten, wenn nicht eine Genauigkeit angegeben wurde, die so klein ist, dass die Zahl der umgewandelten weiten Zeichen erreicht wird, bevor das Ende des Feldes erreicht ist. Wenn ein l-Modifikator vorhanden ist: Vom const wchar_t *-Argument wird erwartet, dass es ein Zeiger auf ein Feld von weiten Zeichen ist. Weite Zeichen aus dem Feld werden bis zu (aber nicht einschließlich) eines abschließenden weiten Nullzeichens geschrieben. Wenn eine Genauigkeit angegeben wird, werden nicht mehr als die angegebene Anzahl geschrieben. Das Feld muss ein abschließendes weites Nullzeichen enthalten, wenn eine Genauigkeit angegeben wird und diese kleiner als oder gleich der Anzahl der weiten Zeichen in dem Feld ist.

RÜCKGABEWERT
Die Funktionen geben die Anzahl der geschriebenen weiten Zeichen zurück, ausschließlich des abschließenden weiten Nullzeichens im Fall der Funktionen swprintf() und vswprintf(). Im Fehlerfall wird -1 zurückgegeben.

ATTRIBUTE
Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
Schnittstelle | Attribut | Wert
wprintf(), fwprintf(), swprintf(), vwprintf(), vfwprintf(), vswprintf() | Multithread-Fähigkeit | MT-Sicher locale

STANDARDS
C11, POSIX.1-2008.

GESCHICHTE
POSIX.1-2001, C99.

ANMERKUNGEN
Das Verhalten von wprintf() und weiterer hängt von der Kategorie LC_TYPE der aktuellen Locale ab.

Falls die Zeichenkette format weite Zeichen enthält, die keine ASCII-Zeichen sind, wird das Programm nur dann richtig arbeiten, wenn der LC_CTYPE der Locale während der Laufzeit der gleiche ist wie der LC_CTYPE während des Kompilierens. Das passiert, weil der Datentyp wchar_t von Plattform und Locale abhängig ist. (Die GNU Libc speichert weite Zeichen als Unicode (ISO/IEC 10646), andere Plattformen tun das nicht. Auch die Verwendung von universelle Zeichennamen nach C99 der Form \unnnn löst das Problem nicht.) Daher sollte die Zeichenkette format in internationalisierten Programmen ausschließlich aus weiten-Zeichen-Versionen der ASCII-Zeichen bestehen oder während der Laufzeit konstruiert werden (z.B. durch gettext(3) oder iconv(3) gefolgt von einem mbstowcs(3)).

SIEHE AUCH
fprintf(3), fputwc(3), fwide(3), printf(3), snprintf(3)

ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer <Martin.E.Schauer@gmx.de> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer (debian-l10n-german@lists.debian.org).