wprintf, fwprintf, swprintf, vwprintf, vfwprintf, vswprintf - Umwandlung der
Ausgabe formatierter weiter Zeichen
Standard-C-Bibliothek (
libc,
-lc)
#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);
Alle oben aufgeführten Funktionen:
_XOPEN_SOURCE >= 500 || _ISOC99_SOURCE
|| _POSIX_C_SOURCE >= 200112L
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.
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.
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-Safe locale |
POSIX.1-2001, POSIX.1-2008, C99.
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-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)).
fprintf(3),
fputwc(3),
fwide(3),
printf(3),
snprintf(3)
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 die
Mailingliste
der Übersetzer