1 .\" Copyright (c) 1999 Andries Brouwer (aeb@cwi.nl)
3 .\" This is free documentation; you can redistribute it and/or
4 .\" modify it under the terms of the GNU General Public License as
5 .\" published by the Free Software Foundation; either version 2 of
6 .\" the License, or (at your option) any later version.
8 .\" The GNU General Public License's references to "object code"
9 .\" and "executables" are to be interpreted as the output of any
10 .\" document formatting or typesetting system, including
11 .\" intermediate and printed output.
13 .\" This manual is distributed in the hope that it will be useful,
14 .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
15 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 .\" GNU General Public License for more details.
18 .\" You should have received a copy of the GNU General Public
19 .\" License along with this manual; if not, write to the Free
20 .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
24 .\" Earlier versions of this page influenced the present text.
25 .\" It was derived from a Berkeley page with version
26 .\" @(#)printf.3 6.14 (Berkeley) 7/30/91
27 .\" converted for Linux by faith@cs.unc.edu, updated by
28 .\" Helmut.Geyer@iwr.uni-heidelberg.de, agulbra@troll.no and Bruno Haible.
30 .\" 1999-11-25 aeb - Rewritten, using SUSv2 and C99.
31 .\" 2000-07-26 jsm28@hermes.cam.ac.uk - three small fixes
32 .\" 2000-10-16 jsm28@hermes.cam.ac.uk - more fixes
34 .\" Translation for said earlier version:
35 .\" Translated to German Mon May 27 16:00:00 1996 by Patrick Rother <krd@gulu.net>
36 .\" Modified Fri May 30 11:48:54 1996 by Martin Schulze (joey@infodrom.north.de)
37 .\" Modified Mon Jun 10 01:06:57 1996 by Martin Schulze (joey@linux.de)
38 .\" Modified Tue Dec 12 14:27:23 1996 by Martin Schulze (joey@linux.de)
39 .\" New approach for new version using old translations:
40 .\" Modified 15 Feb 2001 Michael Piefel <piefel@informatik.hu-berlin.de>
42 .TH PRINTF 3 "16. Oktober 2000" "GNU" "Bibliotheksfunktionen"
44 printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf \- formatierte Ausgabe
48 .BI "int printf(const char *" format ", ...);"
50 .BI "int fprintf(FILE *" stream ", const char *" format ", ...);"
52 .BI "int sprintf(char *" str ", const char *" format ", ...);"
54 .BI "int snprintf(char *" str ", size_t " size ", const char *" format ", ...);"
56 .BI "int asprintf(char **" strp ", const char *" format ", ...);"
58 .BI "int dprintf(int " d ", const char *" format ", ...);"
60 .B #include <stdarg.h>
62 .BI "int vprintf(const char *" format ", va_list " ap );
64 .BI "int vfprintf(FILE *" stream ", const char *" format ", va_list " ap );
66 .BI "int vsprintf(char *" str ", const char *" format ", va_list " ap );
68 .BI "int vsnprintf(char *" str ", size_t " size ", const char *" format ", va_list " ap );
70 .BI "int vasprintf(char **" strp ", const char *" format ", va_list " ap );
72 .BI "int vdprintf(int " d ", const char *" format ", va_list " ap );
76 erzeugt Ausgaben in einen
78 wie unten beschrieben. Die Funktionen
82 schreiben ihre Ausgabe auf
84 dem Standardausgabekanal;
88 schreiben in den angegebenen Ausgabekanal
95 schreiben in den String
103 sind äquivalent zu den Functionen
109 nur dass sie mit einer va_list statt einer variablen Zahl von Argumenten
110 aufgerufen werden. Diese Funktionen rufen das Makro
112 nicht auf. Daher ist der Wert von
114 nach dem Aufruf undefiniert. Die Anwendung sollte nachher selbst
118 Diese acht Funktionen schreiben die Ausgabe unter Kontrolle eines
119 .IR format "\-Strings,"
120 der angibt, wie die folgenden Argumente (oder Argumente, auf die mittels der
121 Möglichkeit der variablen Zahl von Argumenten von
123 zugegriffen wird) für die Ausgabe konvertiert werden.
125 Diese Funktionen geben die Anzahl der Zeichen zurück, die ausgegeben
126 wurden (ohne abschließendes "\e0" zum Terminieren von Strings).
127 .BR snprintf " und " vsnprintf
130 Bytes (inklusive abschließendem '\e0'), und geben \-1 zurück, wenn
131 die Ausgabe auf dieses Limit gekürzt werden musste.
132 (Zumindest bis glibc 2.0.6. Seit glibc 2.1 folgen diese Funktionen dem
133 C99-Standard und geben die Anzahl der Zeichen (ohne abschließendes "\e0")
134 zurück, die ausgegeben worden wären, wenn genug Platz vorhanden gewesen wäre.)
135 .SS "Format des Formatstrings"
136 Der Formatstring ist eine Zeichenkette, die, so vorhanden, in ihrem initialen
137 Shift-Zustand beginnt und endet.
138 Der Formatstring setzt sich zusammen aus Null oder mehr Anweisungen: normale
141 welche unverändert zum Ausgabekanal kopiert werden;
142 und Umwandlungsspezifikationen, welche jeweils null oder mehr Argumente
143 fordern. Jede Umwandlungsspezifikation wird durch das Zeichen
145 eingeleitet und endet mit einem
146 .IR Umwandlungsspezifikator .
147 Dazwischen können (in dieser Ordnung) null oder mehr
149 eine optionale minimale
154 .IR Längenmodifikator .
156 Die Argumente müssen (nach \fItype promotion\fP) genau zu den
157 Umwandlungsspezifikatoren passen. Standardmäßig werden die Argumente in der
158 Reihenfolge benutzt, in der sie angegeben sind, wobei jeder `*' und jeder
159 Umwandlungsspezifikator das nächste Argument abfragt (und es ist ein Fehler,
160 wenn nicht ausreichend Argumente gegeben sind). Man kann auch explizit angeben,
161 welches Argument genommen wird, an jeder Stelle wo ein ein Argument erforderlich
162 ist, indem man `%m$' anstelle von `*' schreibt, wobei die Dezimalzahl m die
163 Position des gewünschten Arguments in der Argumentenliste angibt, beginnend mit
167 printf("%*d", width, num);
173 printf("%2$*1$d", width, num);
176 äquivalent. Der zweite Stil erlaubt wiederholte Referenzen auf das gleiche
177 Argument. Der C99-Standard schließt den Stil mit `$' nicht mit ein, er stammt
178 aus der \fISingle Unix Specification\fP. Wenn der Stil, der `$' benutzt,
179 eingesetzt wird, muss er durchgehend für alle Umwandlungen, die ein Argument
180 nehmen, und alle Breiten- und Genauigkeitsargumente verwendet werden, darf aber
181 mit `%%', das kein Argument konsumiert, vermischt werden. Es darf keine Lücken
182 in der Zahl der Argumente, die mit `$' spezifiziert werden, geben; zum Beispiel
183 muss, wenn Argument 1 und 3 auftreten, auch Argument 2 irgendwo im Formatstring
186 Für einige numerische Umwandlungen wird ein Radixzeichen ("Dezimalkomma") oder
187 ein Tausender-Gruppierungszeichen verwendet. Des tatsächlich benutzte Zeichen
188 hängt vom LC_NUMERIC-Teil der Locale ab. Die POSIX-Locale benutzt `.' als
189 Radixzeichen und hat kein Gruppierungszeichen. Damit resultiert
192 printf("%'.2f", 1234567.89);
195 in `1234567.89' in der POSIX-Locale, in `1234567,89' in der
196 Locale nl_NL und in `1.234.567,89' in der Locale da_DK.
197 .SS "Die Zeichen für die Flags"
198 Das Zeichen `%' wird von null oder mehr der folgenden Flags gefolgt:
201 gibt an, dass der Wert in eine ``alternative Form'' gewandelt werden soll.
204 wird das erste Zeichen der Ausgabe eine Null (indem `0' vorangestellt wird, wenn
205 der Wert nicht schon Null war). Bei den Umwandlungen
209 wird einem Ergebnis ungleich Null der String `0x' (oder `0X' bei
211 vorangestellt. Bei den Umwandlungen
221 enthält das Ergebnis immer einen Dezimaltrennzeichen, auch wenn ihm keine Ziffern
222 folgen. (Normalerweise tritt ein Dezimaltrennzeichen nur in Ergebnissen auf, wenn
223 ihm eine Ziffer folgt.) Bei den Umwandlungen
227 werden nachfolgende Nullen nicht aus dem Ergebnis entfernt, wie sie es
228 normalerweise würden.
229 Für andere Umwandlungen ist das Ergebnis undefiniert.
232 Auffüllen mit Nullen. Bei den Umwandlungen
248 wird der umgewandelte Wert links mit Nullen, nicht mit Leerzeichen aufgefüllt.
256 Wenn eine Genauigkeit bei einer numerischen Umwandlung
264 angegeben ist, wird das Flag
267 Für andere Umwandlungen ist das Ergebnis undefiniert.
270 Linksbündige Ausgabe des umgewandelten Wertes an der Feldgrenze gesetzt wird.
271 (Standard ist rechtsbündige Ausrichtung.) Außer bei der Umwandlung
273 wird der umgewandelte Wert rechts mit Leerzeichen aufgefüllt statt links
274 mit Leerzeichen oder Nullen. Ein
278 falls beide angegeben sind.
281 (ein Leerzeichen) gibt an, dass ein Leerzeichen vor einer positiven Zahl
282 bleiben soll, die durch einen Vorzeichenwechsel entstanden ist.
285 gibt an, dass vor alle durch Vorzeichenwechsel entstandenen Zahlen das
286 Vorzeichen (`+' oder `-') gesetzt wird. Standardmäßig wird ein
287 Vorzeichen nur für negative Zahlen verwendet. Ein
289 übersteuert ein Leerzeichen, falls beide angegeben sind.
291 Die obigen fünf Flags werden vom C-Standard definiert. Die SUSv2 spezifiziert ein
295 Für dezimalen Umwandlungen
303 gibt an, dass die Ausgabe bei einem numerischen Argument guppiert
304 werden soll, wenn die lokale Spracherweiterung dieses angibt.
305 Beachte, dass viele Versionen vom
307 diese Option nicht parsen kann und stattdessen eine Warnung ausgeben.
308 SUSv2 schließt %'F nicht mit ein.
310 glibc 2.2 fügt ein weiteres Flag hinzu.
313 Für dezimale Ganzzahlumwandlungen
317 benutzt die Ausgabe die alternativen Ausgabeziffern der Locale, wenn es solche
318 gibt (zum Beispiel arabische Ziffern). Allerdings schließt die Bibliothek keine
319 Locale-Definitionen mit ein, die
322 .\" See http://sources.redhat.com/ml/libc-alpha/2000-08/msg00230.html
324 Eine optionale Dezimalzahl, die die minimale Feldbreite angibt. Wenn der
325 umgewandelte Wert weniger Zeichen als die Feldbreite hat, wird er links mit
326 Leerzeichen aufgefüllt (oder rechts, wenn das Flag für Linksbündigkeit
327 gesetzt ist). Statt einer Dezimalzahl kann auch `*' oder `*m$' (für eine
328 Dezimalzahl m) angegeben werden, um zu spezifizieren, dass die Feldbreite im
329 nächsten (oder m-ten) Argument gegeben ist, welches den Type
331 haben muss. Eine negative Feldbreite wird als Flag `-' gefolgt von einer
332 positiven Breite interpretiert. In keinem Fall resultiert eine nichtexistierende
333 oder kleine Feldbreite im Abschneiden eines Feldes; ist das Ergebnis einer
334 Umwandlung breiter als die Feldbreite, so wird das Feld erweitert, um das
335 Ergebnis aufzunehmen.
336 .SS "Die Genauigkeit"
337 Eine optionale Genauigkeit in der Form eines Punkts (`\&.') gefolgt von einer
338 optionalen Zahl. Statt einer Dezimalzahl kann auch `*' oder `*m$' (für eine
339 Dezimalzahl m) angegeben werden, um zu spezifizieren, dass die Genauigkeit im
340 nächsten (oder m-ten) Argument gegeben ist, welches den Type
343 Wenn die Zahl weggelassen wird oder es eine negative Zahle ist, wird eine
344 Genauigkeit von Null angenommen. Dies gibt die minimale Anzahl der Ziffern an,
345 die bei den Umwandlungen
353 erscheinen, bzw. die Anzahl der Ziffern nach dem Dezimaltrennzeichen bei
361 , die maximale Anzahl von signifikanten Ziffern bei
365 , oder die maximale Anzahl von auszugebenden Zeichen eines Strings bei
369 .SS "Der Längenmodifikator"
370 Im Folgenden steht "Ganzzahlumwandlung" für
380 Eine folgende Ganzzahlumwandlung entspricht einem Argument vom Typ
383 .IR "unsigned char" ,
386 entspricht einem Zeiger auf ein
387 .IR signed - char -Argument.
390 Eine folgende Ganzzahlumwandlung entspricht einem Argument vom Typ
393 .IR "unsigned short int" ,
396 entspricht einem Zeiger auf ein
397 .IR short - int -Argument.
400 Eine folgende Ganzzahlumwandlung entspricht einem Argument vom Typ
403 .IR "unsigned long int",
406 entspricht einem Zeiger auf ein
407 .IR long - int -Argument,
410 entspricht einem Zeiger auf ein
411 .IR wchar_t -Argument,
414 Eine folgende Ganzzahlumwandlung entspricht einem Argument vom Typ
417 .IR "unsigned long long int" ,
420 entspricht einem Zeiger auf ein
421 .IR long - long - int -Argument.
435 .IR "long double" -Argument.
436 (C99 erlaubt %LF, aber SUSv2 nicht.)
439 (`quad'. Nur BSD 4.4 und Linux libc5. Nicht benutzen.) Dies ist ein Synonym für
443 Eine folgende Ganzzahlumwandlung entspricht einem Argument vom Typ
449 Eine folgende Ganzzahlumwandlung entspricht einem Argument vom Typ
455 in dieser Bedeutung. Nicht benutzen.)
458 Eine folgende Ganzzahlumwandlung entspricht einem Argument vom Typ
461 SUSv2 kennt nur die Längenmodifikatoren
489 .SS "Der Umwandlungsspezifikator"
490 Ein Zeichen, das den Typ der anzuwendenden Umwandlung angibt.
491 Die Umwandlungsspezifikatoren und ihre Bedeutung sind:
496 (oder eine entsprechende Variante) wird umgewandelt in eine
497 vorzeichenbehaftete Dezimalzahl.
498 Die Genauigkeit, sofern vorhanden, gibt die minimale Anzahl vor Ziffern an,
499 die auftreten muss; wenn der umgewandelte Wert weniger Ziffern benötigt, wird er
500 links mit Nullen aufgefüllt. Die voreingestellte Genauigkeit ist 1. Wird 0 mit
501 einer expliziten Genauigkeit 0 gedruckt, so ist die Ausgabe leer.
505 .IR unsigned - int -Argument
506 wird in eine vorzeichenlose Oktal-
514 umgewandelt. Die Buchstaben
516 werden für Umwandlungen
518 benutzt; die Buchstaben
522 Die Genauigkeit, sofern vorhanden, gibt die minimale Anzahl vor Ziffern an,
523 die auftreten muss; wenn der umgewandelte Wert weniger Ziffern benötigt, wird er
524 links mit Nullen aufgefüllt. Die voreingestellte Genauigkeit ist 1. Wird 0 mit
525 einer expliziten Genauigkeit 0 gedruckt, so ist die Ausgabe leer.
530 wird gerundet und in das Format
531 .if \w'\*(Pm'=0 .ds Pm ±
532 .BR "" [\-]d \&. ddd e \\*(Pmdd
533 umgewandelt, wobei eine Ziffer vor dem Dezimaltrennzeichen erscheint und die
534 Anzahl der Ziffern dahinter der Genauigkeit entspricht; wenn die Genauigkeit
535 fehlt, wird sie als 6 angenommen; wenn die Genauigkeit Null ist, erscheint kein
536 Dezimaltrennzeichen. Eine Umwandlung
538 benutzt den Buchstaben
542 um den Exponenten einzuleiten. Der Exponent enthält immer mindestens zwei
543 Ziffern; wenn der Wert Null ist, ist der Exponent 00.
548 wird gerundet und umgewandelt in dezimale Notation im Format
549 .BR "" [-]ddd \&. ddd,
550 wobei die Anzahl der Ziffern hinter dem Dezimaltrennzeichen der Genauigkeit
551 entspricht. Wenn die Genauigkeit fehlt, wird sie als 6 angenommen; wenn die
552 Genauigkeit Null ist, erscheint kein Dezimaltrennzeichen. Wenn ein
553 Dezimaltrennzeichen erscheint, befindet sich mindestens eine Ziffer davor.
557 nicht und sagt, dass Zeichenkettenrepräsentationen für Unendlich und NaN (Not a
558 Number - keine Zahl) vorhanden sein können. Der C99-Standard spezifiziert
559 `[-]inf' oder `[-]infinity' für Unendlich, und eine Zeichenkette beginnend mit
560 `nan' für NaN im Falle von
562 und `[-]INF' oder `[-]INFINITY' oder `NAN' im Falle von
568 wird umgewandelt in das Format
578 Die Genauigkeit gibt die Anzahl der signifikanten Stellen an.
579 Wenn die Genauigkeit fehlt, werden 6 Ziffern zurückgegeben; wenn die Genauigkeit
580 Null ist, wird sie als 1 angenommen.
583 wird benutzt, wenn der Exponent kleiner als \-4 oder größer als oder gleich
584 der Genauigkeit ist. Nachfolgende Nullen im Bruchteil werden entfernt; ein
585 Dezimaltrennzeichen erscheint nur, wenn es von mindestens einer Ziffer gefolgt wird.
588 (C99; nicht in SUSv2) Für die Umwandlung
592 in hexadezimale Notation gebracht (unter Benutzung der Buchstaben abcdef) in der Form
593 .BR "" [-] 0x h \&. hhhh p \\*(Pmd;
596 sind dagegen der Präfix
598 die Buchstaben ABCDEF und das Exponententrennzeichen
600 Vor dem Dezimaltrennzeichen ist eine hexadezimale Ziffer, die Anzahl der Stellen
601 dahinter entspricht der Genauigkeit. Die standardmäßige Genauigkeit genügt für
602 eine exakte Repräsentation des Wertes, wenn eine exakte Repräsentation zur Basis
603 2 existiert und ist sonstigenfalls groß genug, um Werte vom Typ
605 zu unterscheiden. Die Ziffer vor dem Dezimaltrennzeichen ist unspezifiziert für
606 nichtnormalisierte Zahlen, und nicht Null, aber ansonsten unspezifiziert, für
607 normalisierte Zahlen.
610 Wenn kein Modifikator
612 vorhanden ist, wird das Argument
616 und das resultierende Zeichen ausgegeben.
619 vorhanden ist, wird das
621 (breites Zeichen) mit einem Ruf der Funktion
623 zu einer Multibyte-Folge umgewandelt, mit der Konvertierung beginnend im
624 initialen Zustand, und die resultierende Multibyte-Zeichenkette wird ausgegeben.
627 Wenn kein Modifikator
629 vorhanden ist, wird das Argument
631 erwartet als ein Zeiger auf ein Array vom Typ Character (Zeiger
632 auf einen String). Zeichen aus diesem Array werden bis zu (aber nicht
633 einschließlich) des terminierenden
635 ausgegeben; wenn eine Genauigkeit angegeben ist, werden nicht mehr Zeichen als die
636 angegebene Anzahl ausgegeben.
637 Wenn eine Genauigkeit angegeben ist braucht kein Null-Zeichen vorhanden zu sein;
638 wenn die Genauigkeit nicht angegeben ist oder größer als die Array-Größe ist,
639 muss das Array ein beendendes Zeichen
644 vorhanden ist, wird das
645 .IR const - wchar_t - * -Argument
646 als ein Zeiger auf ein Array von breiten Zeichen erwartet. Breite Zeichen aus
647 dem Array werden zu Multibyte-Zeichen umgewandelt (jedes mit einem Ruf von
649 beginnend im initialen Zustand vor dem ersten breiten Zeichen), bis zu und
650 einschließlich des terminierenden breiten
652 Wenn eine Genauigkeit angegeben ist, werden nicht mehr Bytes als die
653 angegebene Anzahl ausgegeben, aber es werden keine partiellen Multibyte-Zeichen
654 ausgegeben. Man beachte, dass die Genauigkeit die Anzahl der
659 .I Bildschirmpositionen
660 angibt. Das Array muss ein terminierendes breites
662 enthalten, wenn nicht eine Genauigkeit gegeben ist, die so klein ist, dass die
663 Zahl der geschriebenen Bytes sie übersteigt, bevor das Ende des Arrays erreicht
667 (Nicht in C99, aber in SUSv2.)
673 (Nicht in C99, aber in SUSv2.)
681 wird hexadezimal ausgegeben (wie bei
687 Die Anzahl der bis hierhin ausgegebenen Zeichen wird in dem Integer
688 gespeichert, der durch das Zeiger-Argument
690 (bzw. Äquivalent) gegeben ist. Kein Argument wird umgewandelt.
693 Ein `%' wird ausgegeben. Kein Argument wird umgewandelt. Die komplette
694 Umwandlungsspezifikation ist `%%'.
698 .if \w'\*(Pi'=0 .ds Pi pi
699 Um \*(Pi mit fünf Dezimalstellen auszugeben:
704 fprintf(stdout, "pi = %.5f\en", 4 * atan(1.0));
708 Um Datum und Zeit in der Form `Sunday, July 3, 10:02' auszugeben,
713 Zeiger auf Strings sind:
717 fprintf(stdout, "%s, %s %d, %.2d:%.2d\en",
718 weekday, month, day, hour, min);
722 Die meisten Länder benutzen die Reihenfolge Tag-Monat-Jahr. Deshalb muss eine
723 internationalisierte Version in der Lage sein, die Argumente in der durch das
724 Format angegebenen Reihenfolge zu drucken:
728 fprintf(stdout, format,
729 weekday, month, day, hour, min);
734 von der Locale abhängt, und möglicherweise die Argumente permutiert. Mit dem
738 "%1$s, %3$d. %2$s, %4$d:%5$.2d\en"
741 bekommt man dann `Sonntag, 3. Juli, 10:02'.
743 Um einen genügend großen String zu allozieren und in ihn zu schreiben (Code
744 stimmt sowohl für glibc 2.0 als auch glibc 2.1):
751 make_message(const char *fmt, ...) {
752 /* Guess we need no more than 100 bytes. */
756 if ((p = malloc (size)) == NULL)
759 /* Try to print in the allocated space. */
761 n = vsnprintf (p, size, fmt, ap);
763 /* If that worked, return the string. */
764 if (n > -1 && n < size)
766 /* Else try again with more space. */
767 if (n > -1) /* glibc 2.1 */
768 size = n+1; /* precisely what is needed */
770 size *= 2; /* twice the old size */
771 if ((p = realloc (p, size)) == NULL)
792 sind konform zu ANSI X3.159-1989 (`ANSI C') und ISO/IEC 9899:1999 (`ISO C99').
797 sind konform zu ISO/IEC 9899:1999.
799 Hinsichtlich des Rückgabewerts von
801 widersprechen sich SUSv2 und der C99-Standard: wird
805 gerufen, dann vereinbart SUSv2 einen unspezifizierten Rückgabewert kleiner als
806 1, während C99 es zulässt, dass
808 in diesem Fall NULL ist, und (wie immer) den Rückgabewert als die Anzahl der
809 Zeichen, die, wäre der Ausgabestring groß genug gewesen, geschrieben worden
812 Linux' libc5 kennt die fünf Standardflags von C und das '-Flag, Locale, %m$
813 und *m$. Sie kennt die Längenmodifikatoren h, l, L, Z und q, akzeptiert aber L
814 und q sowohl für \fIlong double\fP als auch für \fIlong long\fP (das ist ein
815 Bug). Sie erkennt FDOU nicht mehr, fügt aber einen neuen Umwandlungsspezifikator
821 glibc 2.0 fügt Umwandlungsspezifikatoren C und S hinzu.
823 glibc 2.1 fügt Längenmodifikatoren hh, j, t und z sowie
824 Umwandlungsspezifikatoren a und A hinzu.
826 glibc 2.2 fügt den Umwandlungsspezifikatoren F mit der Bedeutung von C99 hinzu,
829 Unix V7 defininiert die drei Routinen
833 und hat das Flag `-', die Breite oder Genauigkeit `*', den Längenmodifikator l
834 und die Umwandlungsspezifikatoren doxfegcsu sowie D, O, U, X als Synonyme für
835 ld, lo, lu, lx. Das stimmt auch noch für BSD 2.9.1, aber BSD 2.10 hat die Flags
836 `#', `+' und ` ' und erwähnt D, O, U, X nicht mehr. BSD 2.11 hat
840 und warnt davor, D, O, U, X zu benutzen.
841 BSD 4.3 Reno hat das Flag `0', die Längenmodifikatoren h nd L und die
842 Umwandlungsspezifikatoren n, p, E, G, X (mit der heutigen Bedeutung) und rät von
844 BSD 4.4 führt die Funktionen
848 und den Längenmodifikator q ein.
849 FreeBSD hat auch die Funktionen
853 die einen Puffer, der groß genug für
861 einen beliebig langen String annehmen, muss der Rufer Acht geben, nicht den
862 tatsächlich verfügbaren Platz zu überschreiten; dies ist oft unmöglich
863 sicherzustellen. Man beachte, dass die Länge der Strings oft abhängig von der
864 Locale und schwierig vorherzusagen sind.
875 weist häufig auf einen Fehler hin, da
877 das Zeichen `%' enthalten kann. Kommt
879 von ungeprüfter Nutzereingabe, kann es %n enthalten und veranlasst
881 in den Speicher zu schreiben und erzeugt damit ein Sicherheitsloch.