wprintf(3) Library Functions Manual wprintf(3) BEZEICHNUNG wprintf, fwprintf, swprintf, vwprintf, vfwprintf, vswprintf - Umwandlung der Ausgabe formatierter weiter Zeichen BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include #include int wprintf(const wchar_t *restrict format, ); int fwprintf(FILE *restrict datenstrom, const wchar_t *restrict format, ); int swprintf(size_t n; wchar_t wzz[restrict n], size_t n, 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(size_t n; wchar_t wzz[restrict n], size_t n, const wchar_t *restrict format, va_list arg); Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)): Alle oben aufgefuhrten Funktionen: _XOPEN_SOURCE >= 500 || _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L BESCHREIBUNG Die wprintf()-Funktionsfamilie ist die Variante der printf()-Funktionsfamilie fur 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) fur weitere Informationen). Die Funktionen fwprintf() und vfwprintf() geben weite Zeichen auf datenstrom aus. Dazu darf datenstrom nicht byteorientiert sein (siehe die Funktion fwide(3) fur weitere Informationen). Die Funktionen swprintf() und vswprintf() schreiben ihre Ausgabe in ein Feld von wchar_t. Der Programmierer muss sicherstellen, dass in wzz mindestens fur n 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: o Die Zeichenkette format besteht aus weiten Zeichen. o Die Ausgabe besteht aus weiten Zeichen und nicht aus Bytes. o swprintf() und vswprintf() verwenden ein Argument n, sprintf(3) und vsprintf(3) jedoch nicht. snprintf(3) und vsnprint(3) verwenden ebenfalls das Argument n, doch diese Funktionen geben unter Linux im Falle eines Pufferuberlaufs (buffer overflow) nicht -1 zuruck. 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 enthalt, beginnend im ursprunglichen Schiebezustand. Zeichen aus dem Feld werden in weite Zeichen umgewandelt. Fur 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 abschliessenden 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 abschliessendes 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 einschliesslich) eines abschliessenden weiten Nullzeichens geschrieben. Wenn eine Genauigkeit angegeben wird, werden nicht mehr als die angegebene Anzahl geschrieben. Das Feld muss ein abschliessendes weites Nullzeichen enthalten, wenn eine Genauigkeit angegeben wird und diese kleiner als oder gleich der Anzahl der weiten Zeichen in dem Feld ist. RUCKGABEWERT Die Funktionen geben die Anzahl der geschriebenen weiten Zeichen zuruck, ausschliesslich des abschliessenden weiten Nullzeichens im Fall der Funktionen swprintf() und vswprintf(). Im Fehlerfall wird -1 zuruckgegeben und errno gesetzt, um den Fehler anzuzeigen. FEHLER Siehe write(2) und putwc(3). Zusatzlich kann der folgende Fehler auftreten: EOVERFLOW Der zuruckzuliefernde Wert ist grosser als INT_MAX. Die Funktionen fwprintf() und wprintf() konnen zusatzlich mit Folgendem fehlschlagen: ENOMEM Es ist nicht genugend Speicherplatz verfugbar. ATTRIBUTE Siehe attributes(7) fur eine Erlauterung der in diesem Abschnitt verwandten Ausdrucke. +-------------------------+-------------------------+------------------+ |Schnittstelle | Attribut | Wert | +-------------------------+-------------------------+------------------+ |wprintf(), fwprintf(), | Multithread-Fahigkeit | MT-Sicher locale | |swprintf(), vwprintf(), | | | |vfwprintf(), vswprintf() | | | +-------------------------+-------------------------+------------------+ STANDARDS C11, POSIX.1-2008. GESCHICHTE POSIX.1-2001, C99. ANMERKUNGEN Das Verhalten von wprintf() und weiterer hangt von der Kategorie LC_TYPE der aktuellen Locale ab. Falls die Zeichenkette format weite Zeichen enthalt, die keine ASCII-Zeichen sind, wird das Programm nur dann richtig arbeiten, wenn der LC_CTYPE der Locale wahrend der Laufzeit der gleiche ist wie der LC_CTYPE wahrend des Kompilierens. Das passiert, weil der Datentyp wchar_t von Plattform und Locale abhangig 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 lost das Problem nicht.) Daher sollte die Zeichenkette format in internationalisierten Programmen ausschliesslich aus weiten-Zeichen-Versionen der ASCII-Zeichen bestehen oder wahrend 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) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer und Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.18 8. Februar 2026 wprintf(3)