Definition | #include <stdio.h> #include <wchar.h> int fwprintf(FILE *dz, const wchar_t *format [, arglist]); #include <stdarg.h> #include <wchar.h> int vwprintf(const wchar_t *format, va_list arg); #include <wchar.h> int wprintf(const wchar_t *format [, arglist]); int swprintf(wchar_t *s, size_t n, const wchar_t *format [, arglist]); #include <stdarg.h> #include <stdio.h> #include <wchar.h> int vfwprintf(FILE *dz, const wchar_t *format, va_list arg); int vswprintf(wchar_t *s, size_t n, const wchar_t *format, va_list arg); Die Funktionen dienen der formatierten Ausgabe. fwprintf bereitet die Argumente in der Liste arglist gemäß den Angaben in der Langzeichenkette format auf und schreibt sie in die Datei mit dem Dateizeiger dz. fwprintf kehrt zurück, wenn das Ende von format erreicht wird.
vwprintf entspricht der Funktion fwprintf mit dz = stdout , wobei die Argumentliste durch ein Argument vom Typ va_list ersetzt wird, das durch das Makro va_start initialisiert worden sein muss (möglicherweise gefolgt von va_arg -Aufrufen). Die Funktion ruft nicht das Makro va_end auf.
wprintf entspricht der Funktion fwprintf mit dz = stdout .
swprintf schreibt Ausgaben formatiert in die Langzeichenkette s. swprintf entspricht ansonsten der Funktion fwprintf . Es werden maximal n Langzeichen geschrieben, inklusive des abschließenden Nullzeichens, das für n > 0 automatisch angefügt wird.
vfwprintf entspricht der Funktion fwprintf , wobei die Liste durch ein Argument vom Typ va_list ersetzt wird, das durch das Makro va_start initialisiert worden sein muss (möglicherweise gefolgt von va_arg -Aufrufen). Die Funktion ruft nicht das Makro va_end auf.
vswprintf entspricht der Funktion swprintf , wobei die Liste durch ein Argument vom Typ va_list ersetzt wird, das durch das Makro va_start initialisiert worden sein muss (möglicherweise gefolgt von va_arg -Aufrufen). Die Funktion ruft nicht das Makro va_end auf.
|
Parameter | format ist eine Langzeichenkette, die keine, eine oder mehrere Umwandlungsanweisungen und Langzeichen enthält: Umwandlungsanweisungen beginnen mit dem Prozentzeichen (% ). Jede Umwandlungsanweisung wird keinem, einem oder mehreren Argumenten in arglist zugeordnet. Wenn in arglist weniger Argumente übergeben werden, als in format festgelegt sind, ist das Ergebnis undefiniert. Wenn in format weniger Argumente festgelegt sind, als in a arglist übergeben werden, werden die überflüssigen Argumente ignoriert. Die einer Umwandlungsanweisung zugeordneten Argumente werden gemäß der Anweisung konvertiert und formatiert in den Ausgabedatenstrom geschrieben. Zeichen vom Typ wchar_t (aber nicht %), die 1 : 1 in die Ausgabe kopiert werden. Zwischenraumzeichen (siehe Abschnitt „Zwischenraum“ (Grundbegriffe))
Umwandlungsanweisungen Jede Umwandlungsanweisung wird mit dem Zeichen % eingeleitet; darauf folgen: Keines oder mehrere Formatierungszeichen, die die Bedeutung der Umwandlungsanweisung verändern. Eine optionale Ganzzahl (bestehend aus Dezimalziffern) oder ein Asterisk (*), die eine minimale Feldbreite für die Ausgabe eines Arguments angibt. Wenn der umgewandelte Wert aus weniger Zeichen als der Feldbreite besteht, wird links bis zur Feldbreite aufgefüllt (bzw. rechts, wenn das Formatierungszeichen "-" für linksbündige Ausrichtung angegeben wurde).
Eine optionale Genauigkeit, die angibt, wie viele Ziffern mindestens für die Umwandlungen d , i , o , u , x oder X erscheinen sollen, wie viele Ziffern nach dem Dezimalzeichen für die Umwandlungen e , E und f erscheinen sollen, wie viele signifikante Stellen bei den Umwandlungen g und G vorhanden sind oder wie viele Zeichen maximal aus der Zeichenkette für die Umwandlung s ausgegeben werden sollen. Die Genauigkeit hat die Form ".", gefolgt von einer Ganzzahl aus dezimalen Ziffern oder einem Asterisk (*). Ist nur der Punkt angegeben, wird 0 als Genauigkeit eingesetzt.
Ein optionales hh , h , l , ll , L , j , z oder t vor einem Umwandlungszeichen: hh vor d , i , o , u , x oder X : Umwandlung eines Arguments vom Typ char oder unsigned char (das Argument ist entsprechend der ganzzahligen Erweiterung erweitert worden, und sein Wert wird vor der Ausgabe in ein char oder unsigned char umgewandelt);
hh vor n : Umwandlung eines Arguments vom Typ Zeiger auf char ;
h vor d , i , o , u , x oder X : Umwandlung eines Arguments vom Typ short int oder unsigned short int (das Argument ist entsprechend der ganzzahligen Erweiterung erweitert worden, und sein Wert wird vor der Ausgabe in ein short int oder unsigned short int umgewandelt);
h vor n : Umwandlung eines Arguments vom Typ Zeiger auf short int ;
l vor c bedeutet, dass ein Argument vom Typ wint_t umgewandelt werden soll;
l vor s : bedeutet, dass ein Argument vom Typ wchar_t (Zeiger auf eine Langzeichenkette) umgewandelt werden soll;
l vor d , i , o , u , x oder X : Umwandlung eines Arguments vom Typ long int oder unsigned long int ;
l vor n : Umwandlung eines Arguments vom Typ Zeiger auf long int ;
ll vor d , i , o , u , x oder X : Umwandlung eines Arguments vom Typ long long int oder unsigned long long int ;
ll vor n : Umwandlung eines Arguments vom Typ Zeiger auf long long int ;
j vor d , i , o , u , x oder X : Umwandlung eines Arguments vom Typ intmax _t oder uintmax_t ;
j vor n : Umwandlung eines Arguments vom Typ Zeiger auf intmax_t ;
z vor d , i , o , u , x oder X : Umwandlung eines Arguments vom Typ long int oder size_t ;
z vor n : Umwandlung eines Arguments vom Typ Zeiger auf long int ;
t vor d , i , o , u , x oder X : Umwandlung eines Arguments vom Typ ptrdiff_t oder unsigned long int ;
t vor n : Umwandlung eines Arguments vom Typ Zeiger auf ptrdiff_t ;
L vor a , A , e , E , f , F , g oder G : Umwandlung eines Arguments vom Typ long double .
Wenn hh , h , l , ll , L , j , z oder t vor einem anderen Umwandlungszeichen steht, ist das Verhalten undefiniert. l vor s : bedeutet, dass ein Argument vom Typ wchar_t (Zeiger auf eine Langzeichenkette) umgewandelt werden soll;Ein Umwandlungszeichen vom Typ wchar_t , das den Typ der durchzuführenden Umwandlung angibt, siehe Auflistung unten.
Feldbreite, Genauigkeit oder beides können durch das Zeichen * (Asterisk) angegeben werden. In diesem Fall werden die Werte statt aus der Formatangabe aus der Argumentliste entnommen: Die (ganzzahligen) Werte für Feldbreite und/oder Genauigkeit müssen unmittelbar vor dem Argument stehen, das umgewandelt werden soll. Ist eine negative Feldbreite angegeben, wird "-" als Formatierungszeichen interpretiert, dem eine positive Feldbreite folgt. Eine negative Genauigkeit wird interpretiert, als ob die Genauigkeit weggelassen wird. Umwandlungsanweisungen sehen also wie folgt aus: %
|
[-][+]['BLANK'][#][0]
|
[n|*]
| [.m|.*]
|
{[hh|h|l|ll|j|z|t]{d|i|o|u|x|X} |
[hh|h|l|ll|j|z|t]n |
[L]{a|A|e|E|f|F|g|G} |
[l]{c|s} |
{D|O|U|C|S|p} |
%}
| 1. | 2. | 3. | 4. | 5. |
Anfang einer Umwandlungsanweisung Formatierungszeichen Feldbreite Genauigkeit Zeichen, die die eigentliche Umwandlung festlegen
Formatierungszeichen -
| Das Ergebnis der Umwandlung wird linksbündig innerhalb des Felds ausgerichtet. | +
| Das Ergebnis einer Umwandlung mit Vorzeichen wird immer mit einem Vorzeichen ausgegeben (+ oder - ). | 'BLANK' | Wenn das erste Langzeichen einer vorzeichenbehafteten Umwandlung kein Vorzeichen ist oder das Ergebnis einer vorzeichenbehafteten Umwandlung keine Langzeichen ergibt, wird dem Resultat ein Leerzeichen vorangestellt. Wird sowohl das Leerzeichen als auch das Zeichen + angegeben, wird das Formatierungszeichen Leerzeichen ignoriert. | #
| Dieses Formatierungszeichen gibt an, dass der umzuwandelnde Wert in einer "alternativen Form" darzustellen ist. Für die Umwandlung o wird die Genauigkeit so weit erhöht, dass die erste Ziffer des Ergebnisses die Ziffer 0 ist. Für x (oder X ) wird einem Resultat ungleich 0 die Zeichenfolge "0x" (oder "0X" ) vorangestellt. Für a , A , e , E , f , F , g oder G enthält das Ergebnis immer ein Dezimapunkt-Langzeichen, auch wenn keine weiteren Ziffern folgen (normalerweise erscheint ein Dezimalpunkt-Langzeichen nur dann im Ergebnis, wenn ihm eine Ziffer folgt). Für g und G werden abschließende Nullen nicht aus dem Ergebnis entfernt, wie sonst üblich. Das Verhalten bei anderen Umwandlungszeichen ist undefiniert. | 0
| Für d , i , o , u , x , X , a , A , e , E , f , F , g und G werden zum Auffüllen bis zur Feldbreite führende Nullen verwendet (nach Anzeige eines Vorzeichens oder einer Basis); es wird nicht mit Leerzeichen aufgefüllt. Wenn sowohl das Formatierungszeichen 0 als auch - angegeben werden, wird das Formatierungszeichen 0 ignoriert. Ist eine Genauigkeit angegeben, wird für d , i , o , u , x und X das Formatierungszeichen 0 ignoriert. Für andere Umwandlungen ist das Verhalten undefiniert. | n | Minimale Gesamtfeldbreite (inklusive Dezimalzeichen). Falls für die Umwandlung einer Zahl mehr Stellen benötigt werden, hat diese Angabe keine Bedeutung. Ist die Ausgabe kürzer als die angegebene Feldbreite, wird sie bis zur Feldbreite mit Leerzeichen bzw. Nullen aufgefüllt (vgl. Formatierungszeichen - und 0 ). | * | Die Gesamtfeldbreite (siehe n) wird statt in der Umwandlungsanweisung mit einem Argument festgelegt. Der aktuelle Wert (ganzzahlig) muss unmittelbar vor dem umzuwandelnden Argument oder unmittelbar vor dem Wert der Genauigkeitsangabe (Formatierungszeichen .m) in der Argumentliste stehen (durch ein Komma getrennt). | .m | Genauigkeitsangabe.
d -, i -, o -, u -, x - bzw. X -Umwandlung: Minimale Anzahl der auszugebenden Ziffern. Voreingestellt: 1.
e -, E -, f , F- Umwandlung: Genaue Anzahl der Stellen nach dem Dezimalzeichen (maximal 20). Voreingestellt: 6 Stellen.
a -, A -Umwandlung: Genaue Anzahl der Stellen nach dem Dezimalpunkt. Standard: 13 Stellen für long , 27 Stellen für long double .
g - bzw. G -Umwandlung: Maximale Anzahl der signifikanten Stellen.
s -Umwandlung: Maximale Anzahl der auszugebenden Zeichen. Voreingestellt: Alle Zeichen bis zum abschließenden Nullbyte (\0 ). | .*
| Die Genauigkeitsangabe (siehe .m) wird statt in der Umwandlungsanweisung mit einem Argument festgelegt. Der aktuelle Wert (ganzzahlig) muss unmittelbar vor dem umzuwandelnden Argument in der Argumentliste stehen (durch ein Komma getrennt). | Umwandlungszeichen d, i
| Das int -Argument wird in eine vorzeichenbehaftete Dezimalzahl der Form [- ]dddd umgewandelt. Die Genauigkeit legt die minimale Anzahl von Ziffern fest, die ausgegeben werden sollen. Wenn der umzuwandelnde Wert weniger Ziffern ergibt, wird er um führende Nullen erweitert. Die voreingestellte Genauigkeit ist 1. Die Umwandlung des Werts 0 mit einer ausdrücklich genannten Genauigkeit von 0 liefert kein Langzeichen. | o, u
| Das unsigned int -Argument wird in eine vorzeichenlose Oktalzahl (o) oder in eine vorzeichenlose Dezimalzahl (u) der Form dddd umgewandelt. Die Genauigkeit legt die minimale Anzahl von Ziffern fest, die erscheinen sollen; wenn der umzuwandelnde Wert weniger Ziffern ergibt, wird er um führende Nullen erweitert. Die voreingestellte Genauigkeit ist 1. Die Umwandlung des Werts 0 mit einer ausdrücklich genannten Genauigkeit von 0 liefert kein Langzeichen. | x, X
| Das unsigned int -Argument wird in ein eine vorzeichenlose Hexadezimalzahl der Form dddd umgewandelt; außer den Zahlen werden die Buchstaben abcdef (bei x ) bzw. ABCDEF (bei X ) als numerische Zeichen verwendet. Die Genauigkeit legt die minimale Anzahl von Ziffern fest, die erscheinen sollen; wenn der umzuwandelnde Wert weniger Ziffern ergibt, wird er um führende Nullen erweitert. Die voreingestellte Genauigkeit ist 1. Die Umwandlung des Werts 0 mit einer ausdrücklich genannten Genauigkeit von 0 liefert kein Langzeichen. | f, F
| Das double -Argument wird in die dezimale Schreibweise der Form [-] ddd . ddd umgewandelt, wobei die Anzahl der Ziffern nach dem Dezimalzeichen gleich der angegebenen Genauigkeit ist. Ist keine Genauigkeit angegeben, wird die Genauigkeit 6 eingesetzt. Wenn die Genauigkeit gleich 0 ist und kein # -Formatierungszeichen gesetzt ist, wird kein Dezimalzeichen ausgegeben. Wenn das Dezimalzeichen erscheint, wird davor mindestens eine Ziffer ausgegeben. Der Wert wird auf die entsprechende Zahl von Ziffern gerundet. | e, E
| Das double -Argument wird in die Form [-] d.ddde±dd umgewandelt, wobei genau eine Ziffer vor dem Dezimalzeichen ausgegeben wird (diese Ziffer ist ungleich 0, wenn das Argument ungleich 0 ist). Die Anzahl der Nachkommastellen ist gleich der Genauigkeit. Ist keine Genauigkeit angegeben, wird die Genauigkeit 6 eingesetzt. Wenn die Genauigkeit gleich 0 und kein # -Formatierungszeichen gesetzt ist, wird kein Dezimalzeichen ausgegeben. Der Wert wird auf die entsprechende Zahl von Ziffern gerundet. Das Umwandlungszeichen E erzeugt eine Zahl mit E an Stelle von e für die Anzeige des Exponenten. Der Exponent wird zur Basis 10 ausgegeben und enthält immer mindestens zwei Ziffern. Wenn der Wert gleich 0 ist, ist der Exponent gleich 0. | g, G
| Das double -Argument wird in die Form von f oder e umgewandelt (bzw. in die Form E für das Umwandlungszeichen G ). Die Genauigkeit gibt die Anzahl der signifikanten Stellen an. Die Angabe einer Genauigkeit 0 wird durch Genauigkeit 1 ersetzt. Die Form hängt vom umgewandelten Wert ab; die Form e wird nur dann verwendet, wenn der Exponent einer solchen Umwandlung kleiner als -4 oder größer gleich der Genauigkeit ist. Abschließende Nullen werden vom gebrochenen Teil des Ergebnisses entfernt; ein Dezimalzeichen erscheint nur dann, wenn es von einer Ziffer gefolgt wird. | a, A
| Das double -Argument wird in die Form[-] 0xh.hhhh p{+|-} d umgewandelt, wobei genau eine Ziffer vor dem Dezimalzeichen ausgegeben wird (diese Ziffer ist ungleich 0, wenn das Argument ungleich 0 ist). Jedes h entspricht einer Hexadezimalziffer. Die Anzahl der Nachkommastellen ist gleich der Genauigkeit. Ist keine Genauigkeit angegeben, wird die Genauigkeit 13 für double -Argumente bzw. 27 für long double Argumente eingesetzt. Wenn die Genauigkeit gleich 0 und kein # -Formatierungszeichen gesetzt ist, wird kein Dezimalzeichen ausgegeben. Der Wert wird auf die entsprechende Zahl von Ziffern gerundet. Das Umwandlungszeichen a erzeugt eine Zahl mit den Kleinbuchstaben a , b , c , d , e und f sowie x und p , Das Umwandlungszeichen A eine Zahl mit den Großbuchstaben A , B , C , D , E und F sowie X und P . Der Exponent wird zur Basis 2 ausgegeben und enthält immer mindestens eine Ziffer. Wenn der Wert gleich 0 ist, ist der Exponent gleich 0. | c
| Ist das Zeichen l vorangestellt, wird das Argument vom Typ wint_t in den Typ wchar_t umgewandelt, das resultierende Zeichen wird geschrieben. Ist kein l vorangestellt, wird das Argument vom Typ int wie beim Aufruf der Funktion btowc in ein Langzeichen umgewandelt; das resultierende Zeichen wird geschrieben. | s
| Ist kein Zeichen l vorangestellt, soll das Argument vom Typ Zeiger auf ein char -Feld sein. Zeichen aus dem Feld werden so konvertiert wie bei Aufrufen der Funktion mbrtowc . Der Konversions-Status wird in einem Objekt vom Typ mbstate_t beschrieben und mit 0 initialisiert, bevor das erste Mul- tibyte-Zeichen konvertiert wird. Es wird bis zum abschließenden Nullzeichen geschrieben (ausschließlich). Ist das Zeichen l vorangestellt, soll das Argument vom Typ Zeiger auf ein wchar_t -Feld sein. Langzeichen aus dem Feld werden bis zum abschließenden Nullzeichen geschrieben (ausschließlich). Wenn eine Genauigkeit m angegeben ist, werden nicht mehr als m Langzeichen geschrieben. Wird die Genauigkeit nicht angegeben oder ist diese größer als die Länge des konvertierten Feldes, sollte das Feld das Langzeichen 0 enthalten (als Endekriterium). | S
| entspricht ls . | C
| entspricht lc . | p
| Das Argument muss ein Zeiger auf void sein. Die Ausgabe erfolgt als 8- stellige Sedezimalzahl. | n
| Das Argument muss ein Zeiger auf int sein, in welches die Anzahl der bisher von fwprintf beim aktuellen Aufruf geschriebenen Bytes eingetragen wird. Es wird kein Argument umgewandelt. | %
| Es wird das Langzeichen % ausgegeben; es wird kein Argument umgewandelt. Die vollständige Umwandlungsanweisung muss die Form %% haben. | Wenn das Zeichen nach % kein gültiges Umwandlungszeichen ist, ist das Ergebnis der Umwandlung undefiniert. Falls ein Argument eine UNION oder ein Zeiger auf eine UNION ist, ist das Ergebnis der Umwandlung undefiniert. Das Gleiche gilt, wenn ein Argument ein Feld oder ein Zeiger auf ein Feld ist, ausgenommen die drei folgenden Fälle: das Argument ist ein Feld vom Typ char und verwendet %s , das Argument ist ein Feld vom Typ wchar_t und verwendet %ls oder das Argument ist ein Zeiger und verwendet %p . In keinem Fall verursacht eine nicht existierende oder zu kleine Feldbreite das Abschneiden eines Feldes; wenn das Ergebnis einer Umwandlung breiter als die Feldbreite ist, wird das Feld einfach erweitert, um die Ausgabe aufzunehmen. |