Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

fprintf, printf, sprintf - formatiert in Ausgabestrom schreiben

&pagelevel(4)&pagelevel

Definition

#include <stdio.h>

int fprintf(FILE *stream, const char *format [, arglist]);
int printf (const char *format [, arglist]);
int sprintf (char *s, const char *format [, arglist]);

Beschreibung

fprintf() schreibt Ausgaben formatiert in den Ausgabestrom, auf den stream zeigt.

printf() schreibt Ausgaben formatiert in den Standard-Ausgabestrom stdout.

sprintf() schreibt Ausgaben formatiert in aufeinander folgende Bytes, beginnend an der Adresse s, gefolgt vom einem Nullbyte. Der Benutzer ist dafür verantwortlich, dass genügend Platz für die Ausgabe verfügbar ist.

Jede dieser Funktionen konvertiert die Argumente in arglist und gibt sie unter der Steuerung von format aus.

format ist eine Zeichenkette, die in ihrem anfänglichen Umschaltmodus beginnt und endet, sofern einer definiert ist, und keine, eine oder mehrere Umwandlungsanweisungen enthält. format kann drei Arten von Zeichen enthalten:

  • Zeichen vom Typ char, die 1 : 1 in den Ausgabedatenstrom kopiert werden.

  • Zwischenraumzeichen, beginnend mit einem Gegenschrägstrich (\) (siehe isspace()).

  • Umwandlungsanweisungen, beginnend mit dem Prozentzeichen (%), von denen jede keinem, einem oder mehreren Argumenten in arglist zugeordnet wird. 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 arglist übergeben werden, werden die überflüssigen Argumente ignoriert.

Zeichen

Für die derzeitige Version des C-Laufzeitsystems gilt: Es sind nur Zeichen aus dem EBCDIC-Zeichensatz zugelassen.

Zwischenraumzeichen

Zeichen

Bedeutung

Steuerverhalten

\b

Rücksetzzeichen

Die Ausgabe wird 1 Zeichen vor die aktuelle Position verschoben, es sei denn, die aktuelle Position ist der Zeilenanfang. In dieser Version des C-Laufzeitsystems wird \b nur für BS2000-Ausgabe, aber nicht für Ausgabe ins POSIX-Subsystem ausgewertet.

\f

Seitenvorschub

Die Ausgabe wird an den Anfang der nächsten logischen Seite verschoben. In dieser Version des C-Laufzeitsystems wird \f nur für BS2000-Ausgabe, aber nicht für Ausgabe ins POSIX-Subsystem ausgewertet.

\n

Zeilenendezeichen

Die Ausgabe wird an den Anfang der nächsten Zeile verschoben.

\r

Wagenrücklauf

Die Ausgabe wird an den Anfang der aktuellen Zeile verschoben. Alles, was vorher in den Datenstrom dieser Zeile geschrieben wurde, wird nicht ausgegeben.

\t

horizontaler Tabulator

Die Ausgabe wird 8 Zeichen nach der aktuellen Position verschoben.

\v

vertikaler Tabulator

Die Ausgabe wird auf die Position des nächsten vertikalen Tabulators verschoben. In dieser Version des C-Laufzeitsystems wird \v nur für BS2000-Ausgabe, aber nicht für Ausgabe ins POSIX-Subsystem ausgewertet.

Umwandlungsanweisungen (XPG4 Version 2)

Die Umwandlung kann auf das a-te Argument der Argumentliste an Stelle des nächsten, unbenutzten Arguments angewendet werden. In diesem Fall wird das Umwandlungszeichen % durch die Zeichenfolge % a $ ersetzt, wobei a eine Dezimalzahl aus dem Bereich [1, {NL_ARGMAX}] ist, welche die Position des Arguments in der Argumentliste angibt. Diese Eigenschaft erlaubt die Definition von Formatzeichenketten, die Argumente entsprechend einer speziellen Sprache auswählen.

In Formatzeichenketten, die die Umwandlungsanweisung % a $ enthalten, können Elemente aus arglist durch die Formatzeichenkette format so oft wie gewünscht referenziert werden (a-mal). In Formatzeichenketten, die die Umwandlungsanweisung % enthalten, wird jedes Argument genau einmal ausgewertet.

Alle Formen von printf() erlauben das Einfügen eines landessprach-spezifischen Dezimalzeichens in die Ausgabezeichenkette. Das Dezimalzeichen wird durch die Lokalität des Progamms definiert (Kategorie LC_NUMERIC). In der Lokalität POSIX oder einer Lokalität, bei der das Dezimalzeichen nicht definiert ist, ist es auf . (Punkt) voreingestellt.

Jede Umwandlungsanweisung wird entweder vom Zeichen % oder von der Zeichenfolge % a $ eingeleitet; darauf folgen die nachfolgend angegebenen Daten:

  • Keines oder mehrere Formatierungszeichen, die die Bedeutung der Umwandlungsanweisung verändern.

  • Eine optionale Dezimalzahl oder "*", 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). Ist "*"  angegeben, so wird die Gesamtfeldbreite durch ein ganzzahliges Argument festgelegt, das unmittelbar vor dem umzuwandelnden Argument oder unmittelbar vor dem Wert der Genauigkeitsangabe (Formatierungszeichen ".*") in der Argumentliste stehen muss.

  • Eine 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 a, A, e, E , f 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 Zeichenkette aus dezimalen Ziffern, wobei keine Ziffer als 0 gewertet wird oder die Form .*, wenn die Genauigkeit in einem Argument, das dem umzuwandelnden Argument unmittelbar vorausgeht übergeben wird.

  • Ein optionaler s Zeichen Längenmodifikator, der die Größe des umzuwandelnden Arguments anzeigt.
    Wenn ein Längenmodifikator mit anderen als den in der Umwandlungsszeichentabelle aufgeführten Zeichen angegeben wird, ist das Verhalten undefiniert

  • Ein Umwandlungszeichen, das den Typ der durchzuführenden Umwandlung angibt.

Feldbreite, Genauigkeit oder beides können durch das Zeichen * (Asterisk) angegeben werden. In diesem Fall versorgt ein Argument vom Typ int Feldbreite oder Genauigkeit. Argumente, die Feldbreite, Genauigkeit oder beides spezifizieren, müssen in dieser Reihenfolge vor dem Argument stehen, das umgewandelt werden soll. Eine negative Feldbreite wird als "-" Formatierungszeichen interpretiert, dem eine positive Feldbreite folgt. Eine negative Genauigkeit wird interpretiert, als ob die Genauigkeit weggelassen wird. In Formatzeichenketten, die eine Umwandlungsanweisung der Form % a $ enthalten, kann eine Feldbreite oder Genauigkeit durch die Zeichenfolge *a $ angegeben werden, wobei a eine Dezimalzahl aus dem Intervall [1, {NL_ARGMAX}] ist, welche die Position einer Ganzzahl in der Argumentliste angibt, die ihrerseits die Feldbreite oder Genauigkeit angibt, z.B.:

printf ("%1$d:%2$.*3$d:%4$.*3$d\n", hour, min, precision, sec);

format kann entweder nummerierte oder nichtnummerierte Argument-Angaben enthalten, d.h. entweder % a $ und *a $ oder % und *, aber nicht beides. Die Ergebnisse einer Vermischung von nummerierten und unnummerierten Argumentangaben in einer format-Zeichenkette sind undefiniert. Die Verwendung nummerierter Argumentangaben für das Argument A erfordert, dass alle führenden Argumente, vom ersten bis zum (A-1), in der Formatzeichenkette angegeben werden.

Umwandlungsanweisungen können folgendermaßen aufgebaut sein:

%[a$]

['][-][+]['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} |
 {C|S} |
 {D|O|U|p} |
 m |
 % }

  1.

  2.

  3.

  4.

  5.

  1. Anfang einer Umwandlungsanweisung

  2. Formatierungszeichen

  3. Feldbreite

  4. Genauigkeit

  5. Zeichen, die die eigentliche Umwandlung festlegen

Formatierungszeichen

'

Der ganzzahlige Teil des Ergebnisses einer Dezimalumwandlung (%i, %d, %u, %f, F, %g oder %G) wird mit Gruppierungszeichen in Tausenderbereiche unterteilt. Für andere Umwandlungen ist das Verhalten undefiniert. Als Gruppierungszeichen wird das nichtmonetäre verwendet.

-

Das Ergebnis der Umwandlung wird linksbündig innerhalb des Felds ausgerichtet.

+

Das Ergebnis einer vorzeichenbehafteten Umwandlung beginnt immer mit einem Vorzeichen (+ oder -).

'BLANK'

Wenn das erste Zeichen einer vorzeichenbehafteten Umwandlung kein Vorzeichen ist, wird dem Resultat ein Leerzeichen vorangestellt. Dies bedeutet, dass das Leerzeichen ignoriert wird, wenn sowohl das Leerzeichen als auch das Zeichen + angegeben werden.

#

Dieses Formatierungszeichen gibt an, dass der umzuwandelnde Wert in einer "anderen Form" darzustellen ist. Für c, d, i, s und u hat dieses Formatierungszeichen keine Wirkung. Für die Umwandlung o wird die Genauigkeit in der Form 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, g oder G enthält das Ergebnis immer ein Dezimalzeichen, auch wenn keine weiteren Ziffern folgen (normalerweise erscheint ein Dezimalzeichen nur dann im Ergebnis, wenn es von einer Ziffer gefolgt wird). Für g und G werden abschließende Nullen nicht aus dem Ergebnis entfernt, wie sonst üblich.

0

Für d, i, o, u, x, X, e, E, f, g und G werden führende Nullen, nach einer vorhandenen Anzeige von Vorzeichen oder Basis, verwendet, um bis zur Feldbreite aufzufüllen; es wird nicht mit Leerzeichen aufgefüllt. Wenn sowohl das Formatierungszeichen 0 als auch - angegeben werden, wird das Formatierungszeichen 0 ignoriert. Für d, i, o, u, x und X wird, wenn eine Genauigkeit angegeben ist, das Formatierungszeichen 0 ignoriert. Für andere Umwandlungen ist das Verhalten undefiniert.

Umwandlungszeichen

hh

hh vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ signed char bzw. unsigned char.

hh vor n: Das Argument ist vom Typ Zeiger auf signed char (keine Umwandlung).

h

h vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ short int bzw. unsigned short int.

h vor n: Das Argument ist vom Typ Zeiger auf short int (keine Umwandlung).

l

l vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ long int oder unsigned long int.

l vor do, u ist Äquivalent zu den Großbuchstaben D, O, U.

l vor c: Das Argument ist vom Typ wint_t (äquivalent zu C).

l vor s: Das Argument ist vom Typ Zeiger auf wchar_t (äquivalent zu S).

l vor n: Das Argument ist vom Typ Zeiger auf long int (keine Umwandlung).

ll

ll vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ long long int bzw. unsigned long long int.

ll vor n: Das Argument ist vom Typ Zeiger auf long long int.

j

j vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ intmax_t oder uintmax_t.

j vor n: Das Argument ist vom Typ Zeiger auf intmax_t (keine Umwandlung).

z

z vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ size_t oder long int.

z vor n: Das Argument ist vom Typ Zeiger auf long int (keine Umwandlung).

t

t vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ ptrdiff_t oder unsigned long int.

t vor n: Das Argument ist vom Typ Zeiger auf ptrdiff_t (keine Umwandlung).

L          

L vor a, A, e, E, f, Fg, G: Umwandlung eines Arguments vom Typ long double.

d, i

Das int-Argument wird in eine vorzeichenbehaftete Dezimalzahl der Form [-]dddd umgewandelt. Die Genauigkeit legt die minimale Anzahl von Ziffern fest, die erscheinen sollen; wenn der umzuwandelnde Wert in weniger Ziffern repräsentiert werden kann, wird er um führende Nullen erweitert. Die voreingestellte Genauigkeit ist 1. Das Ergebnis einer Umwandlung des Werts 0 mit einer ausdrücklich genannten Genauigkeit von 0 liefert kein Zeichen.

o

Das unsigned int-Argument wird in eine vorzeichenlose Oktalzahl der Form dddd umgewandelt. Die Genauigkeit legt die minimale Anzahl von Ziffern fest, die erscheinen sollen; wenn der umzuwandelnde Wert in weniger Ziffern repräsentiert werden kann, wird er um führende Nullen erweitert. Die voreingestellte Genauigkeit ist 1. Das Ergebnis einer Umwandlung des Werts 0 mit einer ausdrücklich genannten Genauigkeit von 0 liefert kein Zeichen.

u

Das unsigned int-Argument wird in eine vorzeichenlose Dezimalzahl der Form dddd umgewandelt. Die Genauigkeit legt die minimale Anzahl von Ziffern fest, die erscheinen sollen; wenn der umzuwandelnde Wert in weniger Ziffern repräsentiert werden kann, wird er um führende Nullen erweitert. Die voreingestellte Genauigkeit ist 1. Das Ergebnis einer Umwandlung des Werts 0 mit einer ausdrücklich genannten Genauigkeit von 0 liefert kein Zeichen.

x

Das unsigned int-Argument wird in eine vorzeichenlose Hexadezimalzahl der Form dddd umgewandelt; außer den Zahlen werden die Buchstaben abcdef als numerische Zeichen verwendet. Die Genauigkeit legt die minimale Anzahl von Ziffern fest, die erscheinen sollen; wenn der umzuwandelnde Wert in weniger Ziffern repräsentiert werden kann, wird er um führende Nullen erweitert. Die voreingestellte Genauigkeit ist 1. Das Ergebnis einer Umwandlung des Werts 0 mit einer ausdrücklich genannten Genauigkeit von 0 liefert kein Zeichen.

X

Verhält sich wie das Umwandlungszeichen x, nur werden die Buchstaben ABCDEF verwendet.

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, so wird diese mit dem Wert 6 angenommen; 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 (die ungleich 0 ist, wenn das Argument ungleich 0 ist) und wobei die Anzahl der Nachkommastellen gleich der Genauigkeit ist; wenn die Genauigkeit fehlt, wird der Wert 6 angenommen; 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 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), wobei die Genauigkeit die Anzahl der signifikanten Stellen angibt. Wenn die angegebene Genauigkeit gleich 0 ist, wird der Wert 1 angenommen. 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

Darstellung einer Gleitpunktzahl (float oder double) im Format [-] 0xh.hhhh p{+|-} d. Jedes h entspricht einer Hexadezimalziffer. Das Dezimalzeichen wird durch die Lokalität (Kategorie LC_NUMERIC) beeinflusst. Voreingestellt ist der Punkt. Der Exponent wird zur Basis 2 ausgegeben. Bei a-Umwandlung werden die Kleinbuchstaben a, b, c, d, e und f sowie x und p verwendet, bei A-Umwandlung die Großbuchstaben A, B, C, DE und F sowie X und P. Die Anzahl der Stellen nach dem Dezimalzeichen hängt von der Genauigkeitsangabe .m ab; voreingestellt: 27 Stellen bei Umwandlungszeichen L, 13 Stellen sonst. Bei Genauigkeit 0 erfolgt die Ausgabe ohne Dezimalzeichen.

c

Das Argument vom Typ int wird in den Typ unsigned char umgewandelt, das resultierende Zeichen wird geschrieben.

s

Das Argument ist vom Typ Zeiger auf char. Zeichen aus dem Vektor werden bis zum abschließenden Nullbyte geschrieben (ausschließlich); wenn die Genauigkeit angegeben ist, werden nicht mehr als diese Anzahl von Zeichen geschrieben. Wird die Genauigkeit nicht angegeben oder ist diese größer als die Länge des Vektors, enthält der Vektor das Nullbyte.

p

Das Argument muss ein Zeiger auf void sein. Der Wert des Zeigers wird in eine Folge von abdruckbaren Zeichen umgewandelt; im POSIX-Subsystem ist dies die hexadezimale Darstellung der Adresse.

n

Das Argument muss ein Zeiger auf int sein, in welches die Anzahl der bisher von einer der printf-Funktionen geschriebenen Bytes eingetragen wird. Es wird kein Argument umgewandelt.

C

wchar_t wird in einen Byte-Vektor umgewandelt, der ein Zeichen darstellt. Dieses Zeichen wird geschrieben. Wenn die Genauigkeit angegeben ist, ist die Wirkung nicht definiert. Die Umwandlung entspricht einer Umwandlung durch wctomb(). In dieser Version des C-Laufzeitsystems werden nur 1-Byte-Zeichen als Langzeichen unterstützt. Sie sind vom Typ wchar_t (siehe stddef.h). Daher ist dieses Umwandlungszeichen wirkungslos.

S

Das Argument muss ein Zeiger auf einen Vektor vom Typ wchar_t sein. Langzeichenwerte dieses Vektors werden bis zum abschließenden Nullbyte (ohne das Nullbyte) in eine Bytefolge umgewandelt. Die Ergebnis- Bytes werden geschrieben. Wenn die Genauigkeit angegeben ist, werden nur die angegebenen Bytes geschrieben. Es werden nur vollständige Zeichen geschrieben. Wenn die Genauigkeit nicht angegeben oder größer als die Vektorgröße der umgewandelten Bytes ist, muss der Langzeichen-Vektor mit einem Nullbyte abgeschlossen werden. Die Umwandlung entspricht der Umwandlung durch wcstombs(). In dieser Version des C-Laufzeitsystems werden nur 1-Byte-Zeichen als Langzeichen unterstützt. Sie sind vom Typ wchar_t (siehe stddef.h). Daher ist dieses Umwandlungszeichen wirkungslos.

m

GNU-Erweiterung in CRTE-Versionen >= V21.0A42:
%m wird durch die Fehlermeldung, die dem aktuellen Wert von errno entspricht, ersetzt. Ein Argument darf nicht angegeben werden.

%

Es wird das Zeichen % ausgegeben; kein Argument wird umgewandelt.

Wenn das Zeichen nach % oder nach der Zeichenfolge %a$ kein gültiges Umwandlungszeichen ist, ist das Ergebnis der Umwandlung undefiniert.

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. Zeichen, die von printf() und fprintf() erzeugt werden, werden ausgegeben, als ob putc() aufgerufen werden würde.

Die Strukturkomponenten st_ctime und st_mtime der Datei werden zwischen der erfolgreichen Ausführung von fprintf() oder printf() und der nächsten erfolgreichen Beendigung eines Aufrufs von fflush() oder fclose() für denselben Datenstrom oder einem Aufruf von exit() oder abort() für die Änderung markiert (siehe sys/stat.h).

BS2000
Für die Ausgabe in STDOUT unterscheiden sich die Umwandlungsanweisungen, je nachdem, ob KR-Funktionalität (nur bei C/C++ Versionen kleiner V3 vorhanden) oder ANSI-Funktionalität unterstützt werden soll. (Ende)

BS2000

Umwandlungsanweisung (KR-Funktionalität) nur bei C/C++ Versionen kleiner V3 vorhanden

Umwandlungsanweisungen können folgendermaßen aufgebaut sein:

%

[-][+][0][ n |*][. m |.*]

{[l]{d|o|u|x} |
{D|O|U|X} |
{f|e|g} |
{c|s} |
% }

1.

 2.

 3.

  1. Jede Umwandlungsanweisung muss mit einem Prozentzeichen (%) beginnen.

  2. Formatierungszeichen, z.B. zur Steuerung der Vorzeichenausgabe, links- oder rechtsbündigen Ausrichtung, Breite des Ausgabefeldes etc.

  3. Zeichen, die die eigentliche Umwandlung festlegen.

Bedeutung der Formatierungszeichen in der KR-Funktionalität (nur bei C/C++ Versionen kleiner V3 vorhanden):

-

Linksbündige Ausrichtung des Ausgabefeldes. Voreingestellt: Rechtsbündige Ausrichtung.

+

Das Ergebnis einer Umwandlung mit Vorzeichen wird immer mit Vorzeichen ausgegeben. Voreingestellt: Nur ein ggf. negatives Vorzeichen wird ausgegeben.

0

Mit Nullen auffüllen. Bei allen Umwandlungen wird das Ausgabefeld mit Nullen aufgefüllt. Voreingestellt: Das Ausgabefeld wird mit Leerzeichen aufgefüllt. Die Auffüllung mit Nullen wird auch bei linksbündiger Ausrichtung (Formatierungszeichen -) durchgeführt.

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. e-, f-, g-Umwandlung: Genaue Anzahl der Stellen nach dem Dezimalzeichen (maximal 20). Voreingestellt: 6 Stellen. s-Umwandlung: Maximale Anzahl der auszugebenden Zeichen. Voreingestellt: Alle Zeichen bis zum abschließenden Nullbyte. Bei allen anderen Umwandlungen wird die Genauigkeitsangabe ignoriert.

.*

Die Genauigkeit (siehe .m) wird statt in der Umwandlungsanweisung mit einem Argument festgelegt. Der aktuelle Wert (ganzzahlig) muss durch ein Komma getrennt unmittelbar vor dem umzuwandelnden Argument in der Argumentliste stehen.

Bedeutung der Umwandlungszeichen in der KR-Funktionalität (nur bei C/C++ Versionen kleiner V3 vorhanden): 

l

l vor d, o, u, x: Umwandlung eines Arguments vom Typ long. Die Angabe ist identisch mit den Großbuchstaben D, O, U, X.

d, o, u, x

Darstellung einer ganzen Zahl (int) als
Dezimalzahl mit Vorzeichen (d),
Oktalzahl ohne Vorzeichen (o),
Dezimalzahl ohne Vorzeichen (u),
Hexadezimalzahl ohne Vorzeichen (x).

f

Darstellung einer Gleitpunktzahl (float oder double) im Format [-] ddd.ddd Das Dezimalzeichen wird durch die Lokalität (Kategorie LC_NUMERIC) beeinflusst. Voreingestellt ist der Punkt. Die Anzahl der Stellen nach dem Dezimalzeichen hängt von der Genauigkeitsangabe .m ab; voreingestellt: 6 Stellen. Bei Genauigkeit 0 erfolgt die Ausgabe ohne Dezimalzeichen.

e

Darstellung einer Gleitpunktzahl (float oder double) im Format [-] d.ddd e{+|-} dd. Das Dezimalzeichen wird durch die Lokalität (Kategorie LC_NUMERIC) beeinflusst. Voreingestellt ist der Punkt. Die Anzahl der Stellen nach dem Dezimalzeichen hängt von der Genauigkeitsangabe .m ab; Voreingestellt: 6 Stellen. Bei Genauigkeit 0 wird ein Dezimalzeichen ohne nachfolgende Ziffern ausgegeben.

g

Darstellung einer Gleitpunktzahl (float oder double) im f- oder e-Format. Die Anzahl der Stellen nach dem Dezimalzeichen hängt von der Genauigkeitsangabe .m ab. Es wird jeweils die Darstellung gewählt, die unter Wahrung der Genauigkeit am wenigsten Platz beansprucht.

c

Format für die Ausgabe eines einzelnen Zeichens (char). Das Nullbyte wird ignoriert.

s

Format für die Ausgabe von Zeichenketten. Die printf-Funktionen schreiben so viele Zeichen der Zeichenkette, wie mit der Genauigkeit .m angegeben ist. Voreingestellt: Die printf()-Funktionen schreiben alle Zeichen ausschließlich des abschließenden Nullbytes.

%

Ausgabe des Zeichens %, keine Umwandlung. (Ende)

BS2000

Umwandlungsanweisung (ANSI-Funktionalität)

Umwandlungsanweisungen können folgendermaßen aufgebaut sein: :

%

[-][+]['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|p} |
 % }

1.

 2.

  3.

  1. Jede Umwandlungsanweisung muss mit einem Prozentzeichen (%) beginnen.

  2. Formatierungszeichen, z.B. zur Steuerung der Vorzeichenausgabe, links- oder rechtsbündigen Ausrichtung, Breite des Ausgabefeldes etc.

  3. Zeichen, die die eigentliche Umwandlung festlegen.

Bedeutung der Formatierungszeichen in der ANSI-Funktionalität:

-

Linksbündige Ausrichtung des Ausgabefeldes. Voreingestellt: rechtsbündig.

+

Das Ergebnis einer Umwandlung mit Vorzeichen wird immer mit Vorzeichen ausgegeben. Voreingestellt: Nur ein ggf. negatives Vorzeichen wird ausgegeben.

'BLANK'

Wenn das erste Zeichen einer mit Vorzeichen umzuwandelnden Zeichenfolge kein Vorzeichen ist, wird dem Ergebnis ein Leerzeichen vorangestellt. Das Formatierungszeichen 'BLANK' wird ignoriert, wenn gleichzeitig + angegeben wird.

#

Umwandlung des Ergebnisses in ein alternatives Format.
o-Umwandlung: Die Genauigkeit wird so erhöht, dass die erste Ziffer des Ergebnisses die Ziffer 0 ist.
x- bzw. X-Umwandlung: Einem Ergebnis ungleich 0 wird die Zeichenfolge 0x bzw. 0 vorangestellt.
a-, A-, e-, E-, f-, Fg- bzw. G-Umwandlung: Das Ergebnis enthält immer ein Dezimalzeichen, auch wenn danach keine weiteren Ziffern folgen (normalerweise enthält das Ergebnis nur ein Dezimalzeichen, wenn danach mindestens eine Ziffer folgt). Außerdem werden bei g- bzw. G-Umwandlung abschließende Nullen nicht weggelassen.
Das Formatierungszeichen # hat keine Wirkung bei c-, s-, d-, i-, u-Umwandlung.

0

Mit Nullen auffüllen. Bei der Umwandlung von ganzen Zahlen (d, i, o, u, x, X) und Gleitpunktzahlen (a, A, e, E, f, Fg, G) wird das Ausgabefeld mit Nullen aufgefüllt. Voreingestellt: Das Ausgabefeld wird mit Leerzeichen aufgefüllt. 0 wird ignoriert, wenn das Formatierungszeichen oder bei der Umwandlung von ganzen Zahlen eine Genauigkeit .m angegeben wird. Bei c-, p- und s-Umwandlung hat das Formatierungszeichen 0 keine Wirkung.

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 double, 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).

Bedeutung der Umwandlungszeichen in der ANSI-Funktionalität: 

hh

hh vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ signed char bzw. unsigned char.

hh vor n: Das Argument ist vom Typ Zeiger auf signed char (keine Umwandlung).

h

h vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ short int bzw. unsigned short.

h vor n: Das Argument ist vom Typ Zeiger auf short int (keine Umwandlung).

l

l vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ long int. oder unsigned long int.

l vor c: Das Argument ist vom Typ wint_t.

l vor s: Das Argument ist vom Typ Zeiger auf wchar_t.

l vor n: Das Argument ist vom Typ Zeiger auf long int (keine Umwandlung).

ll

ll vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ long long int bzw. unsigned long long int.

ll vor n: Das Argument ist vom Typ Zeiger auf long long int.

j

j vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ intmax_t oder uintmax_t.

j vor n: Das Argument ist vom Typ Zeiger auf intmax_t (keine Umwandlung).

z

z vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ size_t oder long int.

z vor n: Das Argument ist vom Typ Zeiger auf long int (keine Umwandlung).

t

t vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ ptrdiff_t oder unsigned long int.

t vor n: Das Argument ist vom Typ Zeiger auf ptrdiff_t (keine Umwandlung).

L          

L vor a, A, e, E, f, Fg, G: Umwandlung eines Arguments vom Typ long double.

d, i, o, u, x, X

Darstellung einer ganzen Zahl (int) als
Dezimalzahl mit Vorzeichen (d, i),
Oktalzahl ohne Vorzeichen (o),
Dezimalzahl ohne Vorzeichen (u),
Hexadezimalzahl ohne Vorzeichen (x, X).
Bei x werden die Kleinbuchstaben abcdef benutzt, bei X die Großbuchstaben ABCDEF. Die Genauigkeitsangabe .m gibt die minimale Anzahl der auszugebenden Ziffern an. Ist der Wert mit weniger Ziffern darstellbar, wird das Ergebnis mit führenden Nullen aufgefüllt. Voreingestellt ist Genauigkeit 1. Bei Genauigkeit 0 und Wert 0 erfolgt keine Ausgabe.

f, F

Darstellung einer Gleitpunktzahl (float oder double) im Format [-] ddd.ddd. Das Dezimalzeichen wird durch die Lokalität (Kategorie LC_NUMERIC) beeinflusst. Voreingestellt ist der Punkt. Die Anzahl der Stellen nach dem Dezimalzeichen hängt von der Genauigkeitsangabe .m ab; voreingestellt: 6 Stellen. Bei Genauigkeit 0 erfolgt die Ausgabe ohne Dezimalzeichen.

e, E

Darstellung einer Gleitpunktzahl (float oder double) im Format [-] d.ddd e{+|-} dd. Das Dezimalzeichen wird durch die Lokalität (Kategorie LC_NUMERIC) beeinflusst. Voreingestellt ist der Punkt. Der Exponent wird zur Basis 10 ausgegeben. Bei E-Umwandlung wird dem Exponenten der Großbuchstabe E vorangestellt. Die Anzahl der Stellen nach dem Dezimalzeichen hängt von der Genauigkeitsangabe .m ab; voreingestellt: 6 Stellen. Bei Genauigkeit 0 erfolgt die Ausgabe ohne Dezimalzeichen.

g, G

Darstellung einer Gleitpunktzahl (float oder double) im f- oder e-Format (bzw. bei G-Umwandlung im E-Format). Die Anzahl der signifikanten Stellen hängt von der Genauigkeitsangabe .m ab. Das e- bzw. E-Format wird nur dann verwendet, wenn der Exponent des Umwandlungsergebnisses kleiner -4 oder größer als die angegebene Genauigkeit ist.

a, A

Darstellung einer Gleitpunktzahl (float oder double) im Format [-] 0xh.hhhh p{+|-} d. Jedes h entspricht einer Hexadezimalziffer. Das Dezimalzeichen wird durch die Lokalität (Kategorie LC_NUMERIC) beeinflusst. Voreingestellt ist der Punkt. Der Exponent wird zur Basis 2 ausgegeben. Bei a-Umwandlung werden die Kleinbuchstaben a, b, c, d, e und f sowie x und p verwendet, bei A-Umwandlung die Großbuchstaben A, B, C, DE und F sowie X und P. Die Anzahl der Stellen nach dem Dezimalzeichen hängt von der Genauigkeitsangabe .m ab; voreingestellt: 27 Stellen bei Umwandlungszeichen L, 13 Stellen sonst. Bei Genauigkeit 0 erfolgt die Ausgabe ohne Dezimalzeichen.

c

Ohne Umwandlungszeichen l: Das Argument vom Typ int wird umgewandelt in den Typ unsigned char, und das entsprechende Zeichen wird geschrieben.
Mit Umwandlungszeichen l: Das Argument vom Typ wint_t wird umgewandelt wie bei ls ohne Angabe einer Genauigkeit, wobei das Argument ein Zeiger auf ein 2-elementiges Feld ist, dessen erstes Element das wint_t-Argument enthält und das zweite das Null-Langzeichen.

p

Umwandlung eines Arguments vom Typ Zeiger auf void. Die Ausgabe erfolgt als 8-stellige Hexadezimalzahl (analog zu der Angabe %08.8x).

s

Ohne Umwandlungszeichen l: Das Argument ist ein Zeiger auf eine Zeichenkette vom Typ char. Die Zeichenkette sollte mit ’\0’ abgeschlossen sein. Die printf-Funktionen schreiben so viele Zeichen der Zeichenkette, wie mit der Genauigkeit .m angegeben ist.
Voreingestellt: Die printf-Funktionen schreiben alle Zeichen ausschließlich des abschließenden Nullbytes.
Mit Umwandlungszeichen l: Das Argument ist vom Typ Zeiger auf eine Langzeichenkette (wchar_t). Alle Langzeichen bis zum abschließenden Null-Langzeichen inklusive werden in Multibyte-Zeichen konvertiert (wie durch wcrtomb; das zugehörige mbstate_t-Objekt wird vor Konvertierung des ersten Langzeichens mit Null initialisiert).
Die printf-Funktionen schreiben so viele Zeichen der Zeichenkette (inklusive Umschaltsequenzen), wie mit der Genauigkeit .m angegeben ist.
Voreingestellt: Die printf-Funktionen schreiben alle Zeichen ausschließlich des abschließenden Nullbytes.
Ein unvollständiges Multibyte-Zeichen wird in keinem Fall geschrieben.

n

Es findet keine Umwandlung und Ausgabe des Arguments statt. Das Argument ist vom Typ Zeiger auf int. Dieser ganzzahligen Variablen wird die Anzahl der Zeichen zugewiesen, die die printf-Funktionen bis zu diesem Zeitpunkt für die Ausgabe erzeugt haben.

%

Ausgabe des Zeichens %, keine Umwandlung. (Ende)

Returnwert

Anzahl der übertragenen Zeichen (ohne Nullbyte bei sprintf())



bei erfolgreicher Beendigung.                     


negativer Wert



bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen.

Fehler

fprintf() und printf() schlagen fehl, wenn gilt:

 

EAGAIN

Für den Dateideskriptor, der stream zu Grunde liegt, ist das O_NONBLOCK-Flag gesetzt, und der Prozess wird beim Schreiben verzögert.

 

EBADF

Der Dateideskriptor, der sich auf stream bezieht, ist kein für das Schreiben gültiger Dateideskriptor.

 

EFBIG

Es wurde versucht, in eine Datei zu schreiben, wobei die maximale Dateigröße oder die Grenze für die Prozessdateigröße überschritten wurde (siehe ulimit()).

 

EINTR

Das Schreiben wurde durch den Empfang eines Signals unterbrochen, und es wurden keine Daten übertragen.

 

EIO

Der Prozess ist Mitglied einer Hintergrund-Prozessgruppe und versucht, auf sein steuerndes Terminal zu schreiben. TOSTOP ist gesetzt. Das Signal SIGTTOU wird vom Prozess weder blockiert noch ignoriert, und die Prozessgruppe des Prozesses ist verwaist.

 

ENOSPC

Es ist kein freier Platz auf dem Datenträger mehr vorhanden.

 

EPIPE

Es wurde versucht, in eine Pipe oder FIFO zu schreiben, die für keinen Prozess zum Lesen geöffnet war. Außerdem wird das Signal SIGPIPE an den Prozess gesendet.

Hinweise

Bei der Umwandlung von Gleitpunktzahlen runden die printf-Funktionen auf die angegebene Genauigkeit.

Die printf-Funktionen nehmen keine Konvertierung von einem Datentyp in einen anderen vor. Soll ein Wert nicht entsprechend seinem Typ ausgegeben werden, muss er explizit konvertiert werden (z.B. mit dem cast-Operator).

Die Zeichen werden nicht sofort in die externe Datei geschrieben, sondern in einem C-internen Puffer zwischengespeichert (siehe Abschnitt "Pufferung von Datenströmen“).

Ob fprintf() für eine BS2000- oder eine POSIX-Datei ausgeführt wird, hängt von der Programmumgebung ab.

BS2000
Maximale Anzahl der auszugebenden Zeichen: Bei KR-Funktionalität (nur bei C/C++ Versionen kleiner V3 vorhanden) können pro fprintf-Aufruf maximal 1400 Zeichen ausgegeben werden, bei ANSI-Funktionalität maximal 1400 Zeichen pro Konversionselement (z.B. %s).

Bei Textdateien mit der Zugriffsart SAM und variabler Satzlänge, für die zusätzlich eine maximale Satzlänge angegeben ist, gilt: Wenn bei fopen() die Angabe split=no gemacht wurde, werden Sätze, die länger als die maximale Satzlänge sind, beim Schreiben auf die maximale Satzlänge gekürzt. Standardmäßig oder mit der Angabe split=yes werden diese Sätze in mehrere Sätze aufgeteilt. Hat ein Satz genau die maximale Satzlänge, wird nach diesem ein Satz der Länge Null geschrieben. (Ende)

Versuche, nicht initialisierte Variablen oder Variablen nicht entsprechend ihrem Datentyp auszugeben, können zu undefinierten Ergebnissen führen.

Wenn in einer Umwandlungsanweisung dem Prozentzeichen (%) ein nicht definiertes Formatierungs- bzw. Umwandlungszeichen folgt, ist das Verhalten undefiniert.

Siehe auch

fputc(), fscanf(), setlocale(), stdio.h, Abschnitt  "Lokalität“ .