Standard-C-Bibliothek (libc, -lc)
ÜBERSICHT
#include <stdio.h>
int printf(const char *restrict format, …);
int fprintf(FILE *restrict datenstrom,
const char *restrict format, …);
int dprintf(int dd,
const char *restrict format, …);
int vprintf(const char *restrict format, va_list ap);
int vfprintf(FILE *restrict datenstrom,
const char *restrict format, va_list ap);
int vdprintf(int dd,
const char *restrict format, va_list ap);
dprintf(), vdprintf():
Seit Glibc 2.10:
_POSIX_C_SOURCE >= 200809L
Vor Glibc 2.10:
_GNU_SOURCE
Die Funktionenfamilie printf() erzeugt Ausgaben in einem im
Folgenden beschriebenen format. Die Funktionen printf() und
vprintf() schreiben ihre Ausgabe in den Standardausgabedatenstrom
stdout; fprintf() und vfprintf() schreiben in den
angegebenen Ausgabedatenstrom datenstrom.
Die Funktion dprintf() ist zu der Funktion fprintf()
identisch, außer dass sie in einen Dateideskriptor dd statt in
einen stdio(3)-Datenstrom ausgibt.
Die Funktionen vprintf(), vfprintf(),
vdprintf(), sind äquivalent zu den Funktionen printf(),
fprintf() bzw. dprintf(), nur dass sie mit einer
va_list statt einer variablen Zahl von Argumenten aufgerufen werden.
Diese Funktionen rufen das Makro va_end nicht auf. Daher ist der Wert
von ap nach dem Aufruf nicht definiert. Siehe stdarg(3).
Alle diese Funktionen schreiben die Ausgabe unter Kontrolle einer
format-Zeichenkette, die angibt, wie die folgenden Argumente (oder
Argumente, auf die mittels der Möglichkeit der variablen Zahl von
Argumenten von stdarg(3) zugegriffen wird) für die Ausgabe
konvertiert werden.
Die Formatzeichenkette ist eine Zeichenkette, die, so vorhanden,
in ihrem initialen Schiebe-Zustand beginnt und endet. Die Formatzeichenkette
setzt sich zusammen aus Null oder mehr Anweisungen: normale Zeichen (nicht
%) werden unverändert in den Ausgabedatenstrom kopiert;
Umwandlungsanweisungen fordern jeweils null oder mehr Argumente. Jede
Umwandlungsanweisung wird durch das Zeichen % eingeleitet und endet
mit einem Umwandlungskennzeichner. Dazwischen können (in
dieser Reihenfolge) null oder mehr Schalter (Flags), eine optionale
minimale Feldbreite, eine optionale Genauigkeit und ein
optionaler Längenmodifikator vorkommen.
Pauschal ist die Syntax der Umwandlungsanweisung wie folgt:
%[Argument$] [Schalter][Breite][.Genauigkeit][Längenmodifikator]Umwandlung
Die Argumente müssen (nach Typumwandlung) genau zu
den Umwandlungskennzeichner passen. Standardmäßig werden die
Argumente in der angegebenen Reihenfolge benutzt, wobei jeder
»*« (siehe Feldbreite und Genauigkeit weiter
unten) und jeder Umwandlungskennzeichner das nächste Argument abfragt
(und es ist ein Fehler, wenn nicht ausreichend Argumente angegeben sind). Es
kann auch an jeder Stelle, die ein Argument erfordert, explizit angegeben
werden, welches Argument verwendet wird, indem »%m$« anstelle
von »%« und »*m$« anstelle von »*«
geschrieben wird, wobei die Dezimalzahl m die Position des
gewünschten Arguments in der Argumentliste angibt, beginnend mit 1.
Damit sind
printf("%*d", width, num);
und
printf("%2$*1$d", width, num);
gleichwertig. Die zweite Form ermöglicht wiederholte
Referenzen auf das gleiche Argument. Der C99-Standard schließt die
aus der Single Unix Specification stammende Form mit
»$« nicht mit ein. Wenn die »$« verwendende Form
eingesetzt wird, muss sie durchgehend für alle Umwandlungen, die ein
Argument erfordern, und alle Breiten- und Genauigkeitsargumente verwendet
werden, darf aber mit »%%«-Formaten (die kein Argument
erfordern) vermischt werden. Es darf keine Lücken in der Zahl der
mittels »$« spezifizierten Argumente geben; beispielsweise
muss, wenn die Argumente 1 und 3 angegeben werden, auch Argument 2 irgendwo
in der Formatzeichenkette erwähnt werden.
Für einige numerische Umwandlungen wird ein Radixzeichen
(»Dezimalpunkt«) oder ein Tausender-Gruppierungszeichen
verwendet. Das tatsächlich benutzte Zeichen hängt von der
LC_NUMERIC-Komponente der Locale ab (siehe setlocale(3)). Die
POSIX-Locale benutzt ».« als Radixzeichen und hat kein
Gruppierungszeichen. Damit resultiert
printf("%'.2f", 1234567.89);
in »1234567.89« in der POSIX-Locale, in
»1234567,89« in der Locale nl_NL und in
»1.234.567,89« in der Locale da_DK.
Dem Zeichen % folgen null oder mehr der folgenden Schalter:
- #
- Der Wert soll in eine »alternative Form« gewandelt werden.
Bei o-Umwandlungen ist das erste Zeichen der Ausgabe eine Null
(indem eine »0« vorangestellt wird, wenn der Wert nicht
schon Null war). Bei den Umwandlungen x und X wird einem
Ergebnis ungleich Null die Zeichenkette »0x« (oder
»0X« bei X) vorangestellt. Bei den Umwandlungen
a, A, e, E, f, F, g und
G enthält das Ergebnis immer ein Dezimaltrennzeichen, auch
wenn ihm keine Ziffern folgen. (Normalerweise tritt ein
Dezimaltrennzeichen nur in Ergebnissen der Umwandlungen auf, wenn ihm eine
Ziffer folgt.) Bei den Umwandlungen g und G werden
nachfolgende Nullen nicht aus dem Ergebnis entfernt, wie sie es
normalerweise würden. Für m wird die Ausgabe von
strerrorname_np(errno) dargestellt, falls errno einen
gültigen Fehlercode enthält, andernfalls wird der in
errno gespeicherte Wert als Dezimalzahl ausgegeben. Für
andere Umwandlungen ist das Ergebnis nicht definiert.
- 0
- Der Wert soll mit Nullen aufgefüllt werden. Bei den Umwandlungen
d, i, o, u, x, X, a,
A, e, E, f, F, g und G
wird der umgewandelte Wert links mit Nullen anstatt mit Leerzeichen
aufgefüllt. Werden sowohl 0 als auch - angegeben, so
wird 0 ignoriert. Wenn eine Genauigkeit bei einer
Ganzzahlumwandlung (d, i, o, u, x und
X) angegeben ist, wird der Schalter 0 ignoriert. Für
andere Umwandlungen ist das Ergebnis nicht definiert.
- -
- Der umgewandelte Wert soll linksbündig an der Feldgrenze
ausgerichtet werden (Standard ist rechtsbündige Ausrichtung).
Außer bei der Umwandlung n wird der umgewandelte Wert rechts
mit Leerzeichen aufgefüllt statt links mit Leerzeichen oder Nullen.
Ein - setzt ein 0 außer Kraft, falls beide angegeben
sind.
- ' '
- (ein Leerzeichen) Vor einer positiven Zahl (oder einer leeren
Zeichenkette), die durch eine vorzeichenbehaftete Umwandlung mit erzeugt
wurde, soll ein Leerzeichen erhalten bleiben.
- +
- Vor jeder durch eine vorzeichenbehaftete Umwandlung erzeugten Zahl soll
ein Vorzeichen (+ oder -) platziert werden. Standardmäßig
wird ein Vorzeichen nur für negative Zahlen verwendet. Ein +
übersteuert ein Leerzeichen, falls beide verwendet werden.
Die obigen fünf Schalter werden vom C99-Standard definiert.
POSIX spezifiziert ein weiteres Schalterzeichen.
- '
- Für dezimale Umwandlungen (i, d, u, f,
F, g, G) wird die Ausgabe gruppiert, wobei das
Gruppierungszeichen eine nicht monitäre Größe
ist. Irreführenderweise ist dies nicht notwendigerweise alle
Tausend: Beispielsweise gruppiert Karbi (»mjw_IN«) seine
Ziffern einmal in 3, dann wiederholt in 2. Vergleichen Sie die
Gruppierung von locale(7) und Tausende-Trennung mit
mon_grouping/mon_thousands_sep und strfmon(3). In der
Standard-»C«-Locale ist dies eine Nulloperation.
Glibc 2.2 fügt ein weiteres Schalterzeichen hinzu.
- I
- Für dezimale Ganzzahlumwandlungen (i, d, u)
benutzt die Ausgabe die alternativen Ausgabeziffern der Locale, wenn es
solche gibt. Beispielsweise bewirkt diese Option seit Glibc 2.2.3
arabisch-indische Ziffern in der persischen (»fa_IR«)
Locale.
Diese optionale Dezimalzahl gibt die minimale Feldbreite an; die
erste Ziffer ist von Null verschieden. Wenn der umgewandelte Wert weniger
Zeichen als die Feldbreite hat, wird er links mit Leerzeichen
aufgefüllt (oder rechts, wenn der Schalter für
Linksbündigkeit gesetzt ist). Statt einer Dezimalzahl kann auch
»*« oder »*m$« (für irgendeine Ganzzahl
m) angegeben werden, um zu spezifizieren, dass die Feldbreite im
nächsten (oder m-ten) Argument gegeben ist, welches vom Type
int sein muss. Eine negative Feldbreite wird als Schalter
»-« gefolgt von einer positiven Breite interpretiert. In
keinem Fall bewirkt eine fehlende oder kleine Feldbreite das Abschneiden
eines Feldes; ist das Ergebnis einer Umwandlung breiter als die Feldbreite,
so wird das Feld erweitert, um das Ergebnis der Umwandlung aufzunehmen.
Eine optionale Genauigkeit in der Form eines Punkts
(».«) gefolgt von einer optionalen Dezimalzahl. Statt einer
Dezimalzahl kann auch mittels »*« oder »*m$«
(für irgendeine Dezimalzahl m) angegeben werden, dass die
Genauigkeit im nächsten (oder m-ten) Argument gegeben ist,
welches den Typ int haben muss. Falls die Genauigkeit einfach als
».« angegeben ist, wird eine dafür der Wert Null
angenommen. Eine negative Genauigkeit wird angenommen, falls die
Genauigkeitsangabe weggelassen wird. Dies gibt die minimale Anzahl der
Ziffern an, die bei den Umwandlungen d, i, o, u,
x und X erscheinen, bzw. die Anzahl der Ziffern nach dem
Dezimaltrennzeichen bei den Umwandlungen a, A, e,
E, f und F, die maximale Anzahl von signifikanten
Ziffern bei den Umwandlungen g und G oder die maximale Anzahl
von auszugebenden Zeichen einer Zeichenkette bei den Umwandlungen s
und S.
Im Folgenden steht »Ganzzahlumwandlung« für
die Umwandlungen d, i, o, u, x oder
X.
- hh
- Eine folgende Ganzzahlumwandlung entspricht einem Argument vom Typ
signed char oder unsigned char oder eine folgende
n-Umwandlung entspricht einem Zeiger auf ein signed
char-Argument.
- h
- Eine folgende Ganzzahlumwandlung entspricht einem Argument vom Typ
short oder unsigned short oder eine folgende
n-Umwandlung entspricht einem Zeiger auf ein
short-Argument.
- l
- (ell) Eine folgende Ganzzahlumwandlung entspricht einem Argument vom Typ
long oder unsigned long oder eine folgende
n-Umwandlung entspricht einem Zeiger auf ein long-Argument
oder eine folgende c-Umwandlung entspricht einem
wint_t-Argument oder eine folgende s-Umwandlung entspricht
einem Zeiger auf ein wchar_t-Argument. Bei einer folgenden
a-, A-, e-, E-, f-, F-,
g- oder G-Umwandlung wird dieser Längenmodifikator
ignoriert (C99, nicht in SUSv2).
- ll
- (ell-ell) Eine folgende Ganzzahlumwandlung entspricht einem Argument vom
Typ long long oder unsigned long long oder eine folgende
n-Umwandlung entspricht einem Zeiger auf ein long
long-Argument.
- q
- Ein Synonym für ll. Dies ist eine aus BSD abgeleitete nicht
standardisierte Erweiterung, vermeiden sie die Verwendung in neuem
Code.
- L
- Eine folgende a-, A-, e-, E-, f-,
F-, g- oder G-Umwandlung entspricht einem long
double-Argument. C99 erlaubt %LF, aber SUSv2 nicht.
- j
- Eine folgende Ganzzahlumwandlung entspricht einem Argument vom Typ
intmax_t oder uintmax_t oder eine folgende
n-Umwandlung entspricht einem Zeiger auf ein
intmax_t-Argument.
- wN
- Eine nachfolgende Ganzzahlumwandlung entspricht einer Ganzzahl der Breite
von N bit (C23).
- z
- Eine folgende Ganzzahlumwandlung entspricht einem Argument vom Typ
ssize_t oder ssize_t oder eine folgende n-Umwandlung
entspricht einem Zeiger auf ein size_t-Argument.
- Z
- Ein nicht standardisiertes Synonym für z, das von vor dem
Auftauchen von z stammt. Verwenden Sie es nicht in neuem Code.
- t
- Eine folgende Ganzzahlumwandlung entspricht einem Argument vom Typ
ptrdiff_t oder eine folgende n-Umwandlung entspricht einem
Zeiger auf ein ptrdiff_t-Argument.
SUSv3 spezifiziert alle oben genannten, außer den
Modifikatoren, die explizit als nicht standardisierte Erweiterungen vermerkt
sind. SUSv2 kennt nur die Längenmodifikatoren h (in hd,
hi, ho, hx, hX, hn) und l (in
ld, li, lo, lx, lX, ln, lc,
ls) und L (in Le, LE, Lf, Lg,
LG).
Als eine nicht standardisierte Erweiterung behandelt die
GNU-Implementierung ll und L als Synonyme, so dass Sie
llg (als Synonym für das standardmäßige
Lg) und Ld (als Synonym für das
standardmäßige lld) schreiben können. Dies ist
nicht portabel.
Ein Zeichen, das den Typ der anzuwendenden Umwandlung angibt. Die
Umwandlungskennzeichner und ihre Bedeutung sind:
- d, i
- Das int-Argument wird umgewandelt in eine vorzeichenbehaftete
Dezimalzahl. Die Genauigkeit, sofern vorhanden, gibt die minimale Anzahl
von Ziffern an, die auftreten muss; wenn der umgewandelte Wert weniger
Ziffern benötigt, wird er links mit Nullen aufgefüllt. Die
voreingestellte Genauigkeit ist 1. Wird 0 mit einer expliziten Genauigkeit
0 ausgegeben, so ist die Ausgabe leer.
- o, u, x,
X
- Das unsigned int-Argument wird in eine vorzeichenlose Oktal-
(o), Dezimal- (u) oder Hexadezimalzahl (x und
X) umgewandelt. Die Buchstaben abcdef werden für
x-Umwandlungen benutzt; die Buchstaben ABCDEF für
X-Umwandlungen. Die Genauigkeit, sofern vorhanden, gibt die
minimale Anzahl vor Ziffern an, die auftreten muss; wenn der umgewandelte
Wert weniger Ziffern benötigt, wird er links mit Nullen
aufgefüllt. Die voreingestellte Genauigkeit ist 1. Wird 0 mit einer
expliziten Genauigkeit 0 ausgegeben, so ist die Ausgabe leer.
- e, E
- Das double-Argument wird gerundet und in die Form
[-]d.ddde+-dd umgewandelt, wobei eine Ziffer (die sich von 0
unterscheidet, falls das Argument nicht 0 ist) vor dem Dezimaltrennzeichen
erscheint und die Anzahl der Ziffern dahinter der Genauigkeit entspricht;
falls die Genauigkeit fehlt, wird sie als 6 angenommen; falls die
Genauigkeit Null ist, erscheint kein Dezimaltrennzeichen. Eine
E-Umwandlung verwendet den Buchstaben E (in Gegensatz zu
e), um den Exponenten einzuleiten. Der Exponent enthält
immer mindestens zwei Ziffern; falls der Wert Null ist, ist der Exponent
00.
- f, F
- Das double-Argument wird gerundet und umgewandelt in dezimale
Notation im Format [-]ddd.ddd, wobei die Anzahl der Ziffern hinter
dem Dezimaltrennzeichen der vorgegebenen Genauigkeit entspricht. Falls die
Genauigkeit fehlt, wird sie als 6 angenommen; falls die Genauigkeit Null
ist, erscheint kein Dezimaltrennzeichen. Falls ein Dezimaltrennzeichen
erscheint, befindet sich mindestens eine Ziffer davor.
- (SUSv2 kennt F nicht und besagt, dass Zeichenketten-Darstellungen
für Unendlich und NaN (Not a Number - keine Zahl) verfügbar
gemacht werden können. SUSv3 fügt eine Spezifikation
für F hinzu. Der C99-Standard spezifiziert
»[-]inf« oder »[-]infinity« für
Unendlich sowie eine Zeichenkette beginnend mit »nan«
für NaN im Falle von f-Umwandlungen und entsprechen
»[-]INF« oder »[-]INFINITY« oder
»NAN« im Falle von F-Umwandlungen.)
- g, G
- Das double-Argument wird in das Format f oder e (oder
F oder E für die G-Umwandlung) umgewandelt.
Die Genauigkeit gibt die Anzahl der signifikanten Stellen an. Falls die
Genauigkeit fehlt, werden 6 Ziffern zurückgegeben; falls die
Genauigkeit Null ist, wird sie als 1 angenommen. Form e wird
benutzt, falls der Exponent aus seiner Umwandlung kleiner als -4 oder
größer oder gleich der Genauigkeit ist. Abschließende
Nullen in den Nachkommastellen werden entfernt; ein Dezimaltrennzeichen
erscheint nur, wenn ihm mindestens eine Ziffer folgt.
- a, A
- (C99; nicht in SUSv2, aber in SUSv3 hinzugefügt) Für die
a-Umwandlung wird das double-Argument (unter Verwendung der
Buchstaben abcdef) in hexadezimale Notation der Form
[-]0xh.hhhhp±d gebracht; für
A-Umwandlungen werden dagegen das Präfix 0X, die
Buchstaben ABCDEF und das Exponententrennzeichen P verwendet. Vor
dem Radixpunkt steht eine hexadezimale Ziffer, die Anzahl der Stellen
dahinter entspricht der Genauigkeit. Die standardmäßige
Genauigkeit genügt für eine exakte Darstellung des Wertes,
wenn eine exakte Darstellung zur Basis 2 existiert und ist ansonsten
groß genug, um Werte vom Typ double zu unterscheiden. Die
Ziffer vor dem Radixpunkt ist für nicht normalisierte Zahlen nicht
spezifiziert und für normalisierte Zahlen nicht Null, aber
ansonsten nicht spezifiziert. Der Exponent d ist der
ungefähre Exponent von 2, ausgedrückt als dezimale Ganzzahl;
sie enthält stets mindestens eine Ziffer; falls der Wert 0 ist, ist
der Exponent 0.
- c
- Wenn kein Modifikator l vorhanden ist, wird das int-Argument
umgewandelt in einen unsigned char und das resultierende Zeichen
ausgegeben. Wenn ein l vorhanden ist, wird das
wint_t-Argument (wide character) mit einem Aufruf der Funktion
wcrtomb(3) zu einer Multibyte-Folge umgewandelt, mit der
Konvertierung beginnend im initialen Umwandlungszustand, und die
resultierende Multibyte-Zeichenkette wird ausgegeben.
- s
- Wenn kein Modifikator l vorhanden ist, wird das const
char *-Argument erwartet als ein Zeiger auf ein Feld vom Typ
Zeichen (Zeiger auf eine Zeichenkette). Zeichen aus diesem Feld werden bis
zu (aber nicht einschließlich) des abschließenden Nullbytes
(»\0«) ausgegeben; wenn eine Genauigkeit angegeben ist,
werden nicht mehr Zeichen als die angegebene Anzahl ausgegeben. Wenn eine
Genauigkeit angegeben ist, braucht kein Nullbyte vorhanden zu sein; wenn
die Genauigkeit nicht angegeben ist oder größer als das Feld
ist, muss das Feld ein abschließendes Nullbyte enthalten.
- Wenn ein l vorhanden ist, wird das const
wchar_t *-Argument als ein Zeiger auf ein Feld von »wide
characters« erwartet. Wide characters aus dem Feld werden zu
Multibyte-Zeichen umgewandelt (jedes mit einem Aufruf der Funktion
wcrtomb(3), beginnend im initialen Umwandlungszustand vor dem
ersten weiten Zeichen), bis zu und einschließlich des
abschließenden weiten Nullbytes. Die resultierenden
Multibyte-Zeichen werden bis zum (aber nicht einschließlich) des
abschließenden Nullbytes geschrieben. Falls eine Genauigkeit
angegeben ist, werden nicht mehr Bytes als die angegebene Anzahl
ausgegeben, aber es werden keine partiellen Multibyte-Zeichen ausgegeben.
Beachten Sie, dass die Genauigkeit die Anzahl der geschriebenen
Bytes angibt, nicht die Anzahl der weiten Zeichen oder
Bildschirmpositionen. Das Feld muss ein abschließendes
weites Nullzeichen enthalten, wenn nicht eine Genauigkeit gegeben ist, die
so klein ist, dass die Zahl der geschriebenen Bytes sie übersteigt,
bevor das Ende des Feldes erreicht ist.
- C
- (Nicht in C99, aber in SUSv2, SUSv3 und SUSv4.) Synonym für
lc. Verwenden Sie ihn nicht.
- S
- (Nicht in C99, aber in SUSv2, SUSv3 und SUSv4.) Synonym für
ls. Verwenden Sie ihn nicht.
- p
- Das void *-Zeiger-Argument wird hexadezimal ausgegeben (wie
bei %#x oder %#lx).
- n
- Die Anzahl der bis dahin geschriebenen Zeichen wird in der Ganzzahl
gespeichert, die auf das korrespondierende Argument zeigt. Das Argument
muss ein int * oder eine Variante sein, deren
Größe dem (optional) angegebenen Längenmodifikator
der Ganzzahl entspricht. Es wird kein Argument umgewandelt. (Dieser
Kennzeichner wird nicht von der Bionic-C-Bibliothek unterstützt.)
Das Verhalten ist nicht definiert, wenn die Umwandlungsanweisung Schalter,
eine Feldbreite oder eine Genauigkeitsangabe enthält.
- m
- (Glibc-Erweiterung, von uClibc, Musl und auf Android von API-Stufe 29
unterstützt) Gibt die Ausgabe von strerror(errno) (oder
strerrorname_np(errno) in der alternativen Form) aus; es ist kein
Argument erforderlich.
- %
- Es wird ein »%« ausgegeben. Es wird kein Argument
umgewandelt. Die vollständige Umwandlungsanweisung ist
»%%«.
Nach erfolgreicher Ausführung geben diese Funktionen die
Anzahl der ausgegebenen Bytes zurück (ohne das für den
Abschluß der Zeichenkettenausgabe verwendete Nullbyte).
Bei einem Fehler wird ein negativer Wert zurückgegeben und
errno wird gesetzt, um den Fehler anzuzeigen.
Siehe write(2) und putwc(3). Zusätzlich kann
der folgende Fehler auftreten:
- EOVERFLOW
- Der zurückzuliefernde Wert ist größer als
INT_MAX.
Die Funktion dprintf() kann zusätzlich mit Folgendem
fehlschlagen:
- EBADF
- Das Argument dd ist kein zulässiger Dateideskriptor.
Siehe attributes(7) für eine Erläuterung der
in diesem Abschnitt verwandten Ausdrücke.
| Schnittstelle |
Attribut |
Wert |
| printf(), fprintf(), vprintf(),
vfprintf() |
Multithread-Fähigkeit |
MT-Sicher locale |
- fprintf()
- printf()
- vprintf()
- vfprintf()
- C89, POSIX.1-2001.
- dprintf()
- vdprintf()
- GNU, POSIX.1-2008.
Ausgabe 4 des the X/Open Portability Guide (SUSv1, 1994)
fügt ' hinzu.
Glibc 2.1 fügt die Längenmodifikatoren hh,
j, t und z sowie die Umwandlungszeichen a und
A hinzu.
Glibc 2.2 fügt das Umwandlungszeichen F mit
C99-Semantik sowie den Schalter l hinzu.
Glibc 2.35 gibt der alternativen Form (#) des
Umwandlungskennzeichners m eine Bedeutung, nämlich
%#m.
Code wie beispielsweise printf(foo); weist
häufig auf einen Fehler hin, da foo das Zeichen
»%« enthalten kann. Stammt foo von ungeprüfter
Nutzereingabe, kann es »%n« enthalten und veranlasst
printf(), in den Speicher zu schreiben und erzeugt damit ein
Sicherheitsloch.
Um Pi mit fünf Dezimalstellen auszugeben:
#include <math.h>
#include <stdio.h>
fprintf(stdout, "pi = %.5f\n", 4 * atan(1.0));
Um Datum und Zeit in der Form »Sunday, July 3,
10:02« auszugeben, wobei weekday und month Zeiger auf
Zeichenketten sind:
#include <stdio.h>
fprintf(stdout, "%s, %s %d, %.2d:%.2d\n",
weekday, month, day, hour, min);
Die meisten Länder verwenden die Reihenfolge
Tag-Monat-Jahr. Deshalb muss eine internationalisierte Version in der Lage
sein, die Argumente in der durch das Format angegebenen Reihenfolge
auszugeben:
#include <stdio.h>
fprintf(stdout, format,
weekday, month, day, hour, min);
wobei format von der Locale abhängt und
möglicherweise die Argumente vertauscht. Mit dem Wert
"%1$s, %3$d. %2$s, %4$d:%5$.2d\n"
könnte dann »Sonntag, 3. Juli, 10:02« dabei
herauskommen.
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von
Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>, Mario
Blättermann <mario.blaettermann@gmail.com> und Helge Kreutzmann
<debian@helgefjell.de> 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.