swprintf(3) formatierte

Other Alias

wprintf, fwprintf, vwprintf, vfwprintf, vswprintf

ÜBERSICHT

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


int wprintf(const wchar_t *format, …);
int fwprintf(FILE *stream, const wchar_t *format, …);
int swprintf(wchar_t *wcs, size_t maxlen,
const wchar_t *format, …);

int vwprintf(const wchar_t *format, va_list args);
int vfwprintf(FILE *stream, const wchar_t *format, va_list args);
int vswprintf(wchar_t *wcs, size_t maxlen,
const wchar_t *format, va_list args);

Mit Glibc erforderliche 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 »wide characters«. Sie erzeugen eine formatierte Ausgabe von wide characters. (Bei wide characters wird jedes Zeichen in einem wchar_t gespeichert und nimmt daher mehr als nur ein Byte ein.)

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

Die Funktionen fwprintf() und vfwprintf() geben wide characters auf stream aus. Dazu darf stream 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 wcs mindestens für maxlen 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 wide characters.
  • Die Ausgabe besteht aus wide characters und nicht aus Bytes.
  • swprintf() und vswprintf() verwenden ein Argument maxlen, sprintf(3) und vsprintf(3) jedoch nicht. snprintf(3) und vsnprint(3) verwenden ebenfalls das Argument maxlen, 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 wide character) 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 darstellt, beginnend im ursprünglichen »initial shift state«. Zeichen aus dem Feld werden in wide characters umgewandelt. Für jedes Zeichen wird die Funktion mbrtowc(3) aufgerufen; jedesmal mit dem anfänglichen Konvertierungszustand vor dem ersten Byte. Die wide characters werden bis zum abschließenden wchar_t-Zeichen »Null« (L'\0') (aber nicht inklusive) geschrieben. Wird eine Genauigkeit angegeben, so werden nicht mehr wide characters als die angegebene Anzahl geschrieben. Beachten Sie, dass die Genauigkeit die Anzahl der wide characters und nicht die Anzahl der Bytes oder Zeichenpositionen auf dem Bildschirm bezeichnet. Das Feld muss ein abschließendes Null-Byte ('\0') enthalten, wenn nicht eine Genauigkeit angegeben wurde, die so klein ist, dass die Zahl der umgewandelten wide characters 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 wchar_t ist. Wide characters aus dem Feld werden bis zu (aber nicht einschließlich) eines abschließenden wchar_t »Null«geschrieben. Wenn eine Genauigkeit angegeben wird, werden nicht mehr als die angegebene Anzahl geschrieben. Das Feld muss ein abschließendes wchar_t »Null« enthalten, wenn eine Genauigkeit angegeben wird und diese ist kleiner als oder gleich der Anzahl der wchar_t in dem Feld.

RÜCKGABEWERT

Die Funktionen geben die Anzahl der geschriebenen wide characters zurück, ausschließlich des abschließenden wchar_t »Null« 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.
SchnittstelleAttributWert
wprintf(), fwprintf(),
swprintf(), vwprintf(),
vfwprintf(), vswprintf()
Multithread-FähigkeitMT-Safe locale

KONFORM ZU

POSIX.1-2001, POSIX.1-2008, C99.

ANMERKUNGEN

Das Verhalten von wprintf() hängt u.a. von der Kategorie LC_TYPE der aktuellen Locale ab.

Falls die Zeichenkette format wide characters 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 wide characters als Unicode (ISO-10646), andere Plattformen tun das nicht. Auch die Verwendung von »universal character names« nach ISO C99 der Form \unnnn löst das Problem nicht.) Daher sollte die Zeichenkette format in internationalisierten Programmen ausschließlich aus »wide character«-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)).

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 4.06 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer <[email protected]> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 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 <[email protected]>.