Subroutine printf, fprintf, sprintf, snprintf, wsprintf, vprintf, vfprintf, vsprintf, vwsprintf oder vdprintf
Zweck
Druckt die formatierte Ausgabe.
Bibliothek
Standard-C-Bibliothek (libc.a) oder Standard-C-Bibliothek mit 128-Bit-Doppelzeichen (libc128.a)
Syntax
#include <stdio.h>
int printf (Format, [Value, ...])
const char *Format;
int fprintf (Stream, Format, [Value, ...])
FILE *Stream;
const char *Format;
int sprintf (String, Format, [Value, ...])
char *String;
const char *Format;
int snprintf (String, Number, Format, [Value, . . .])
char *String;
int Number;
const char *Format; #include <stdarg.h>
int vprintf (Format, Value)
const char *Format;
va_list Value;
int vfprintf (Stream, Format, Value)
FILE *Stream;
const char *Format;
va_list Value;
int vsprintf (String, Format, Value)
char *String;
const char *Format;
va_list Value;
int vdprintf (fildes, Format, Value);
int fildes;
const char *Format;
va_list Value; #include <wchar.h>
int vwsprintf (String, Format, Value)
wchar_t *String;
const char *Format;
va_list Value;
int wsprintf (String, Format, [Value, ...])
wchar_t *String;
const char *Format; Beschreibung
Die Subroutine printf konvertiert, formatiert und schreibt die Werte des Parameters Wert unter Steuerung des Parameters Format in den Standardausgabedatenstrom. Die Subroutine printf stellt Konvertierungstypen zur Verarbeitung von Codepunkten und wchar_t -Breitzeichencodes bereit.
Die Subroutine fprintf konvertiert, formatiert und schreibt die Werte des Parameters Wert unter Steuerung des Parameters Format in den mit dem Parameter Datenstrom angegebenen Ausgabedatenstrom. Diese Subroutine stellt Konvertierungstypen für die Verarbeitung von Codepunkten und wchar_t -Zeichencodes bereit.
Die Subroutine sprintf konvertiert, formatiert und speichert die Werte des Parameters Wert unter der Steuerung des Parameters Format in aufeinanderfolgende Byte, beginnend mit der mit dem Parameter Zeichenfolge angegebenen Adresse. Die Subroutine sprintf platziert ein Nullzeichen (\0) am Ende. Sie müssen sicherstellen, dass genügend Speicherplatz verfügbar ist, um die formatierte Zeichenfolge aufzunehmen. Diese Subroutine stellt Konvertierungstypen für die Verarbeitung von Codepunkten und wchar_t -Zeichencodes bereit.
Die Subroutine snprintf konvertiert, formatiert und speichert die Werte des Parameters Wert unter Steuerung des Parameters Format in aufeinanderfolgende Byte, beginnend mit der mit dem Parameter Zeichenfolge angegebenen Adresse. Die Subroutine snprintf platziert ein Nullzeichen (\0) am Ende. Sie müssen sicherstellen, dass genügend Speicherplatz verfügbar ist, um die formatierte Zeichenfolge aufzunehmen. Diese Subroutine stellt Konvertierungstypen für die Verarbeitung von Codepunkten und wchar_t -Zeichencodes bereit. Die Subroutine snprintf ist identisch mit der Subroutine sprintf mit der Hinzufügung des Parameters Zahl , der die Größe des Puffers angibt, auf den der Parameter Zeichenfolge verweist.
Die Subroutine wsprintf konvertiert, formatiert und speichert die Werte des Parameters Wert unter Steuerung des Parameters Format in aufeinanderfolgende Zeichen wchar_t , die bei der mit dem Parameter Zeichenfolge angegebenen Adresse beginnen. Die Subroutine wsprintf platziert ein Nullzeichen (\0) am Ende. Der aufrufende Prozess sollte sicherstellen, dass genügend Speicherplatz verfügbar ist, um die formatierte Zeichenfolge aufzunehmen. Die Feldbreiteneinheit wird als Anzahl von wchar_t Zeichen angegeben. Die Subroutine wsprintf ist dieselbe wie die Subroutine printf , außer dass der Parameter Zeichenfolge für die Subroutine wsprintf eine Zeichenfolge mit wchar_t -Breitzeichencodes verwendet.
Alle obigen Subroutinen funktionieren durch Aufrufen der Subroutine _doprnt unter Verwendung von Argumentfunktionen variabler Länge der varargs -Makros.
Die vdprintf-, vprintf-, vfprintf-, vsprintf-und vwsprintf -Subroutinen formatieren und schreiben varargs -Makroparameterlisten. Diese Subroutinen sind mit den Subroutinen drpintf, printf, fprintf, sprintf, snprintfund wsprintf identisch, außer dass sie nicht mit einer variablen Anzahl von Parametern aufgerufen werden. Stattdessen werden sie mit einem Parameterlistenzeiger aufgerufen, wie durch die varargs -Makros definiert.
Parameter
- Nummer
- Gibt die Anzahl Byte in einer Zeichenfolge an, die kopiert oder umgesetzt werden soll.
- Wert
- Gibt 0 oder mehr Argumente an, die den Objekten im Parameter Format direkt zugeordnet werden.
- Datenstrom
- Gibt den Ausgabedatenstrom an
- string
- Gibt die Startadresse an.
- Format
- Eine Zeichenfolge, die zwei Objekttypen enthält:
- Einfache Zeichen, die in den Ausgabedatenstrom kopiert werden.
- Konvertierungsspezifikationen, die jeweils bewirken, dass 0 oder mehr Elemente aus der Parameterliste Wert abgerufen werden. Im Fall der Subroutinen vprintf, vfprintf, vsprintfund vwsprintf bewirkt jede Konvertierungsspezifikation, dass 0 oder mehr Elemente aus den Makroparameterlisten varargs abgerufen werden.
Wenn die Parameterliste Wert nicht genügend Elemente für den Parameter Format enthält, sind die Ergebnisse unvorhersehbar. Wenn weitere Parameter verbleiben, nachdem der gesamte Parameter Format verarbeitet wurde, ignoriert die Subroutine sie.
Jede Konvertierungsspezifikation im Parameter Format hat die folgenden Elemente:
- Ein Prozentzeichen (%)
- 0 oder mehr Optionen, die die Bedeutung der Konvertierungsspezifikation ändern. Die Optionszeichen und ihre Bedeutung sind im Folgenden beschrieben:
- '
- Formatiert die ganzzahligen Teile, die sich aus i, d, u, f, g und G -Dezimalkonvertierungen mit tausendsep -Gruppierungszeichen ergeben. Bei anderen Konvertierungen ist das Verhalten nicht definiert. Diese Option verwendet das nicht monetäre Gruppierungszeichen.
- -
- Richtet das Ergebnis der Konvertierung innerhalb des Felds linksbündig aus.
- +
- Beginnt das Ergebnis einer Konvertierung mit Vorzeichen mit einem Pluszeichen (+) oder Minuszeichen (-).
- Leerzeichen
- Stellt dem Ergebnis ein Leerzeichen voran, wenn das erste Zeichen einer Konvertierung mit Vorzeichen kein Vorzeichen ist. Wenn sowohl das Leerzeichen als auch + -Optionszeichen angezeigt werden, wird die Option für Leerzeichen ignoriert.
- #
- Konvertiert den Wert in ein alternatives Format. Bei Konvertierungen c, d, sund u hat die Option keine Auswirkung. Bei der o -Konvertierung wird die Genauigkeit erhöht, um die erste Ziffer des Ergebnisses als 0 zu erzwingen. Bei Konvertierungen von x und X hat ein Ergebnis ungleich null das Präfix 0x oder 0X . Bei e-, E-, f-, g-und G -Konvertierungen enthält das Ergebnis immer ein Dezimalzeichen, auch wenn ihm keine Ziffern folgen. Bei Konvertierungen g und G werden abschließende Nullen nicht aus dem Ergebnis entfernt.
- 0
- Füllt bei d-, i- o-, u-, x-, X-, e-, E-, f-, g-und G -Konvertierungen mit führenden Nullen auf die Feldbreite auf. Das Feld wird nicht mit Leerzeichen aufgefüllt. Wenn sowohl die Option 0 als auch die Option - angezeigt werden, wird die Option 0 ignoriert. Für d-, i-, o u-, x-und X -Konvertierungen wird bei Angabe einer Genauigkeit auch die Option 0 ignoriert. Wenn die Optionen 0 und ' beide angezeigt werden, werden Gruppierungszeichen eingefügt, bevor das Feld aufgefüllt wird. Bei anderen Konvertierungen sind die Ergebnisse unzuverlässig.
- B
- Gibt ein Zeichen ohne Operation an.
- N
- Gibt ein Zeichen ohne Operation an.
- J
- Gibt ein Zeichen ohne Operation an.
- Eine optionale Dezimalziffernzeichenfolge, die die minimale Feldbreite angibt. Wenn der konvertierte Wert weniger Zeichen als die Feldbreite enthält, wird das Feld auf der linken Seite auf die Feldbreite aufgefüllt. Wenn die Option - (linksbündig) angegeben wird, wird das Feld rechts aufgefüllt.
- Eine optionale Genauigkeit. Die Genauigkeit ist ein . (Punkt) gefolgt von einer Dezimalziffernzeichenfolge. Wenn keine Genauigkeit angegeben ist, ist der Standardwert 0. Die Genauigkeit gibt die folgenden Grenzwerte an:
- Mindestanzahl der Ziffern, die für die Konvertierung von d, i, o, u, xoder X angezeigt werden sollen.
- Die Anzahl der Ziffern, die nach dem Dezimalzeichen für die Konvertierungen e, Eund f angezeigt werden sollen.
- Maximale Anzahl signifikanter Ziffern für g -und G -Konvertierungen
- Maximale Anzahl Byte, die aus einer Zeichenfolge in Konvertierungen von s und S ausgegeben werden sollen.
- Die maximale Anzahl Byte, konvertiert aus dem Array wchar_t , die aus den S -Konvertierungen ausgegeben werden sollen. Nur vollständige Zeichen werden gedruckt.
- Eine optionale Kennung l (Kleinbuchstabe L), ll (Kleinbuchstabe LL), hoder L gibt Folgendes an:
- Ein optionaler h , der angibt, dass eine nachfolgende d-, i-, u-, o-, x-oder X -Konvertierungskennung für einen Parameter short int oder unsigned short int Wert gilt (der Parameter wurde entsprechend den integralen Rabatten hochgestuft). und der zugehörige Wert wird vor dem Drucken in short int oder unsigned short int konvertiert.
- Ein optionaler h , der angibt, dass eine nachfolgende n Konvertierungskennung für einen Zeiger auf einen Parameter short int gilt.
- Ein optionales l (kleines L), das angibt, dass eine nachfolgende Konvertierungskennung d, i, u, o, xoder X für einen Parameter long int oder unsigned long int gilt.
- Ein optionales l (kleines L), das angibt, dass eine nachfolgende n Konvertierungskennung für einen Zeiger auf einen Parameter long int gilt.
- Ein optionaler ll ( LLin Kleinschreibung), der angibt, dass eine nachfolgende d-, i-, u-, o-, x-oder X -Konvertierungskennung für einen Parameter long long int oder unsigned long long int gilt.
- Eine optionale ll ( LLin Kleinschreibung), die angibt, dass eine nachfolgende n Konvertierungskennung auf einen Zeiger auf einen Parameter long long int angewendet wird.
- Ein optionales L , das angibt, dass eine folgende e-, E-, f-, g-oder G -Konvertierungskennung auf einen Parameter long double angewendet wird. Bei einer Verknüpfung mit libc.aist long double mit double (64bits) identisch. Bei einer Verbindung mit libc128.a und libc.abeträgt long double 128 Bit.
- Die optionale Kennung H, Doder DD gibt eine der folgenden Konvertierungen an:
- Ein optionaler H , der angibt, dass eine folgende e-, E-, f-, F-, g-oder G -Konvertierungskennung für einen _Decimal32 -Parameter gilt.
- Ein optionales D , das angibt, dass eine der folgenden e-, E-, f-, F-, g-oder G -Konvertierungskennungen für einen _Decimal64 -Parameter gilt.
- Eine optionale DD -Angabe, die angibt, dass eine der folgenden e-, E-, f-, F-, g-oder G -Konvertierungskennungen für einen _Decimal128 -Parameter gilt.
- Die optionale Kennung vl, lv, vh, hv oder v gibt eine der folgenden Vektordatentypkonvertierungen an:
- Eine optionale v , die angibt, dass eine folgende e-, E-, f-, g-, G-, a-oder A -Konvertierungskennung für einen vector float -Parameter gilt. Sie verarbeitet ein Argument und interpretiert die Daten als eine Reihe von vier 4-Byte-Gleitkommakomponenten.
- Ein optionaler v , der angibt, dass eine folgende c-, d-, i-, u-, o-, x-oder X -Konvertierungskennung für einen Parameter vector signed char, vector unsigned charoder vector bool char gilt. Sie verarbeitet ein Argument und interpretiert die Daten als eine Reihe von 16 1-Byte-Komponenten.
- Eine optionale vl oder lv , die angibt, dass eine folgende d-, i-, u-, o-, x-oder X -Konvertierungskennung auf einen vector signed int-, vector unsigned int-oder vector bool -Parameter angewendet wird. Es verarbeitet ein Argument und interpretiert die Daten als eine Reihe von vier 4-Byte-Ganzzahlkomponenten.
- Eine optionale vh oder hv , die angibt, dass eine folgende d-, i-, u- o-, x-oder X -Konvertierungskennung für einen vector signed short -oder vector unsigned short -Parameter gilt. Es verarbeitet ein Argument und interpretiert die Daten als eine Reihe von acht ganzzahligen 2-Byte-Komponenten.
- Für alle vorhergehenden Kennungen kann ein optionales Trennzeichen unmittelbar vor der Vektorgrößenkennung angegeben werden. Wenn kein Trennzeichen angegeben wird, ist das Standardtrennzeichen ein Leerzeichen, sofern die Konvertierung nicht cist. In diesem Fall ist das Standardtrennzeichen null. Unterstützte optionale Trennzeichen sind
,(Komma),;(Semikolon),:(Doppelpunkt) und_(Unterstreichungszeichen).
- Die folgenden Zeichen geben den Typ der anzuwendenden Konvertierung an:
- %
- Es wird keine Konvertierung durchgeführt. Druckt (%).
- d oder i
- Akzeptiert einen Parameter Wert , der eine Ganzzahl angibt, und konvertiert sie in eine Dezimalschreibweise mit Vorzeichen. Die Genauigkeit gibt die Mindestanzahl der Ziffern an, die angezeigt werden sollen. Wenn der zu konvertierende Wert in weniger Ziffern dargestellt werden kann, wird er mit führenden Nullen erweitert. Die Standardgenauigkeit ist 1. Das Ergebnis der Konvertierung des Werts 0 mit der Genauigkeit 0 ist eine Nullzeichenfolge. Wenn Sie eine Feldbreite mit 0 als führendem Zeichen angeben, wird der Wert für die Feldbreite mit führenden Nullen aufgefüllt.
- u
- Akzeptiert einen Parameter Wert , der eine ganze Zahl ohne Vorzeichen angibt, und konvertiert sie in Dezimalschreibweise ohne Vorzeichen. Die Genauigkeit gibt die Mindestanzahl der Ziffern an, die angezeigt werden sollen. Wenn der zu konvertierende Wert in weniger Ziffern dargestellt werden kann, wird er mit führenden Nullen erweitert. Die Standardgenauigkeit ist 1. Das Ergebnis der Konvertierung des Werts 0 mit der Genauigkeit 0 ist eine Nullzeichenfolge. Wenn Sie eine Feldbreite mit 0 als führendem Zeichen angeben, wird der Wert für die Feldbreite mit führenden Nullen aufgefüllt.
- o
- Akzeptiert einen Parameter Wert , der eine ganze Zahl ohne Vorzeichen angibt, und konvertiert sie in die Oktalnotation ohne Vorzeichen. Die Genauigkeit gibt die Mindestanzahl der Ziffern an, die angezeigt werden sollen. Wenn der zu konvertierende Wert in weniger Ziffern dargestellt werden kann, wird er mit führenden Nullen erweitert. Die Standardgenauigkeit ist 1. Das Ergebnis der Konvertierung des Werts 0 mit der Genauigkeit 0 ist eine Nullzeichenfolge. Wird eine Feldbreite mit 0 als führendes Zeichen angegeben, wird der Wert für die Feldbreite mit führenden Nullen aufgefüllt. Ein Oktalwert für die Feldbreite ist nicht impliziert.
- x oder X
- Akzeptiert einen Parameter Wert , der eine ganze Zahl ohne Vorzeichen angibt, und konvertiert sie in Hexadezimalschreibweise ohne Vorzeichen. Die Buchstaben abcdef werden für die x -Konvertierung und die Buchstaben ABCDEF für die X -Konvertierung verwendet. Die Genauigkeit gibt die Mindestanzahl der Ziffern an, die angezeigt werden sollen. Wenn der zu konvertierende Wert in weniger Ziffern dargestellt werden kann, wird er mit führenden Nullen erweitert. Die Standardgenauigkeit ist 1. Das Ergebnis der Konvertierung des Werts 0 mit der Genauigkeit 0 ist eine Nullzeichenfolge. Wenn Sie eine Feldbreite mit 0 als führendem Zeichen angeben, wird der Wert für die Feldbreite mit führenden Nullen aufgefüllt.
- f
- Akzeptiert einen Parameter Wert , der ein Double angibt, und konvertiert es in Dezimalschreibweise im Format [-]ddd.ddd. Die Anzahl der Ziffern nach dem Dezimalzeichen entspricht der Genauigkeitsspezifikation. Wird keine Genauigkeit angegeben, werden sechs Stellen ausgegeben. Wenn die Genauigkeit 0 ist, wird kein Dezimalzeichen angezeigt.
- e oder E
- Akzeptiert einen Parameter Wert , der ein Double angibt, und konvertiert es in das exponentielle Format [-]d.ddde+/-dd. Vor dem Dezimalzeichen ist eine Ziffer vorhanden, und die Anzahl der Ziffern nach dem Dezimalzeichen entspricht der Genauigkeitsspezifikation. Die Genauigkeitsspezifikation kann im Bereich von 0-17 Ziffern liegen. Wird keine Genauigkeit angegeben, werden sechs Stellen ausgegeben. Wenn die Genauigkeit 0 ist, wird kein Dezimalzeichen angezeigt. Das E -Konvertierungszeichen erzeugt eine Zahl mit E anstelle von e vor dem Exponenten. Der Exponent enthält immer mindestens zwei Ziffern.
- g oder G
- Akzeptiert einen Parameter Wert , der ein Double angibt, und konvertiert es im Stil der e-, E-oder f -Konvertierungszeichen, wobei die Genauigkeit die Anzahl der signifikanten Ziffern angibt. Abschließende Nullen werden aus dem Ergebnis entfernt. Ein Dezimalzeichen wird nur angezeigt, wenn ihm eine Ziffer folgt. Der verwendete Stil hängt vom konvertierten Wert ab. Der Stil e(E, wenn G als Flag verwendet wird) ergibt sich nur, wenn der aus der Konvertierung resultierende Exponent kleiner als -4 ist oder wenn er größer oder gleich der Genauigkeit ist. Wenn eine explizite Genauigkeit 0 ist, wird als 1 angenommen.
- c
- Akzeptiert und gibt einen Parameter Wert aus, der eine Ganzzahl angibt, die in einen Datentyp ohne Vorzeichen char konvertiert wurde.
- C
- Akzeptiert und druckt einen Parameter Wert , der einen wchar_t -Breitzeichencode angibt. Der mit dem Parameter Wert angegebene wchar_t -Breitzeichencode wird in ein Byte-Array konvertiert, das ein Zeichen darstellt. Das Zeichen wird geschrieben. Der Parameter Wert wird ohne Konvertierung geschrieben, wenn die Subroutine wsprintf verwendet wird.
- s
- Akzeptiert einen Wert -Parameter als Zeichenfolge (Zeichenzeiger), und Zeichen aus der Zeichenfolge werden ausgegeben, bis ein Nullzeichen (\0) gefunden wird oder die durch die Genauigkeit angegebene Anzahl Byte erreicht wird. Wird keine Genauigkeit angegeben, werden alle Byte bis zum ersten Nullzeichen gedruckt. Wenn der mit dem Parameter Wert angegebene Zeichenfolgezeiger einen Nullwert hat, sind die Ergebnisse nicht zuverlässig.
- S
- Akzeptiert einen entsprechenden Parameter Wert als Zeiger auf eine wchar_t -Zeichenfolge. Zeichen aus der Zeichenfolge werden (ohne Konvertierung) ausgegeben, bis ein Nullzeichen (\0) gefunden wird oder die durch die Genauigkeit angegebene Anzahl von Breitzeichen erreicht wird. Wenn keine Genauigkeit angegeben ist, werden alle Zeichen bis zum ersten Nullzeichen ausgegeben. Wenn der mit dem Parameter Wert angegebene Zeichenfolgezeiger den Wert null hat, sind die Ergebnisse nicht zuverlässig.
- p
- Akzeptiert einen Zeiger auf void. Der Wert des Zeigers wird in eine Folge von druckbaren Zeichen konvertiert, wie ein Hexadezimalwert ohne Vorzeichen (x).
- n
- Akzeptiert einen Zeiger auf eine ganze Zahl, in die die Anzahl der Zeichen (Codes mit breiten Zeichen im Fall der Subroutine wsprintf ) geschrieben wird, die von diesem Aufruf in den Ausgabedatenstrom geschrieben werden. Es wird kein Argument konvertiert.
Eine Feldbreite oder Genauigkeit kann durch einen Stern (*) anstelle einer Ziffernfolge angegeben werden. In diesem Fall gibt ein ganzzahliger Parameter Wert die Feldbreite oder -genauigkeit an. Der für die Ausgabe konvertierte Parameter Wert wird erst abgerufen, wenn der Konvertierungsbuchstabe erreicht ist. Daher müssen die Parameter, die die Feldbreite oder -genauigkeit angeben, vor dem zu konvertierenden Wert (falls vorhanden) stehen.
Wenn das Ergebnis einer Konvertierung breiter als die Feldbreite ist, wird das Feld erweitert, um das konvertierte Ergebnis aufzunehmen, und es erfolgt kein Abschneiden. Eine kleine Feldbreite oder -genauigkeit kann jedoch zu Abschneiden auf der rechten Seite führen.
Die Subroutine printf, fprintf, sprintf, snprintf, wsprintf, vprintf, vfprintf, vsprintfoder vwsprintf ermöglicht das Einfügen eines sprachabhängigen Radixzeichens in die Ausgabezeichenfolge. Das Radixzeichen wird durch sprachspezifische Daten in der Kategorie LC_NUMERIC der Ländereinstellung des Programms definiert. In der Ländereinstellung C oder in einer Ländereinstellung, in der das Radixzeichen nicht definiert ist, nimmt das Radixzeichen standardmäßig den Wert a an. (Punkt).
Nachdem eine dieser Subroutinen erfolgreich ausgeführt wurde und vor dem nächsten erfolgreichen Abschluss eines Aufrufs an die Subroutine fclose oder fflush im selben Datenstrom oder an die Subroutine exit oder abortst_ctimeundst_mtimeFelder der Datei sind zur Aktualisierung markiert.
Die Konvertierungskennungen e, E, f, gund G stellen die speziellen Gleitkommawerte wie folgt dar:
| Element | Beschreibung |
|---|---|
| Ruhig NaN | +NaNQ oder -NaNQ |
| NaN | +NaNS oder -NaNS |
| +/-INF | + INF oder -INF |
| +/-0 | +0 oder -0 |
Die Darstellung des Pluszeichens (+) hängt davon ab, ob die Formatierungsoption + oder Leerzeichen angegeben ist.
Diese Subroutinen können eine Formatzeichenfolge verarbeiten, die es dem System ermöglicht, Elemente der Parameterliste in variabler Reihenfolge zu verarbeiten. In diesem Fall wird das normale Konvertierungszeichen% (Prozentzeichen) durch %Ziffer$ersetzt, wobei Ziffer eine Dezimalzahl im Bereich von 1 bis NL_ARGMAX ist. Die Konvertierung wird dann auf das angegebene Argument und nicht auf das nächste nicht verwendete Argument angewendet. Diese Funktion ermöglicht die Definition von Formatierzeichenfolgen in einer für bestimmte Sprachen geeigneten Reihenfolge. Wenn die Variablenreihenfolge verwendet wird, wird die Angabe * (Stern) für die Feldbreite in der Genauigkeit durch %Ziffer$ersetzt. Wenn Sie die Funktion für die Variablenreihenfolge verwenden, müssen Sie sie für alle Konvertierungen angeben.
Folgende Kriterien gelten:
- Das an die NLS-Erweiterungen übergebene Format kann entweder das Format der Konvertierung oder die explizite oder implizite Argumentnummer enthalten. Diese Formate können jedoch nicht innerhalb einer einzigen Formatierzeichenfolge gemischt werden, mit Ausnahme von %% (doppeltes Prozentzeichen).
- Der Wert n darf keine führenden Nullen enthalten.
- Wenn %n$ verwendet wird, muss %1$ bis %n- 1$ einschließlich verwendet werden.
- Der Wert n in %n$ liegt im Bereich von 1 bis einschließlich NL_ARGMAX . Weitere Informationen zum Wert für NL_ARGMAX finden Sie in der Datei limits.h .
- Nummerierte Argumente in der Argumentliste können beliebig oft referenziert werden.
- Die Angabe * (Stern) für die Feldbreite oder -genauigkeit ist mit dem Format %n$ der Variablenreihenfolge nicht zulässig; stattdessen wird das Format *m$ verwendet.
Rückgabewerte
Nach erfolgreicher Beendigung geben die Subroutinen printf, fprintf, vprintfund vfprintf die Anzahl der übertragenen Byte zurück (ohne das Nullzeichen [\0] im Fall der Subroutinen sprintfund vsprintf ). Wurde ein Fehler festgestellt, wird ein negativer Wert ausgegeben.
Nach erfolgreicher Beendigung gibt die Subroutine snprintf die Anzahl der Byte zurück, die in den Parameter Zeichenfolge geschrieben wurden (ohne das abschließende Nullbyte). Wenn Ausgabezeichen gelöscht werden, da die Ausgabe die Länge des Parameters Zahl überschreitet, gibt die Subroutine snprintf die Anzahl Byte zurück, die in den Parameter Zeichenfolge geschrieben worden wären, wenn der Parameter Zahl groß genug gewesen wäre (ohne das abschließende Nullbyte).
Nach erfolgreicher Beendigung geben die Subroutinen wsprintf und vwsprintf die Anzahl der übertragenen Breitzeichen zurück (ohne das Breitzeichen Nullzeichen [\0]). Wurde ein Fehler festgestellt, wird ein negativer Wert ausgegeben.
Fehlercodes
Die Subroutine printf, fprintf, sprintf, snprintfoder wsprintf ist nicht erfolgreich, wenn die mit dem Parameter Datenstrom angegebene Datei ungepuffert ist oder der Puffer gelöscht werden muss und eine oder mehrere der folgenden Bedingungen zutreffen:
| Element | Beschreibung |
|---|---|
| EAGAIN | Das Flag O_NONBLOCK oder O_NDELAY wird für den Dateideskriptor gesetzt, der der mit dem Parameter Datenstrom oder Zeichenfolge angegebenen Datei zugrunde liegt, und der Prozess würde in der Schreiboperation verzögert werden. |
| EBADF | Der Dateideskriptor, der der mit dem Parameter Datenstrom oder Zeichenfolge angegebenen Datei zugrunde liegt, ist kein gültiger Dateideskriptor, der zum Schreiben geöffnet ist. |
| EFBIG | Es wurde versucht, in eine Datei zu schreiben, die die Dateigrößenbegrenzung dieses Prozesses oder die maximale Dateigröße überschreitet. Weitere Informationen finden Sie in der Subroutine ulimit . |
| EINTR | Die Schreiboperation wurde aufgrund des Empfangs eines Signals beendet und entweder wurden keine Daten übertragen oder es wurde keine Teilübertragung gemeldet. Hinweis: Abhängig davon, an welche Bibliotheksroutine die Anwendung gebunden ist, kann diese Subroutine EINTRzurückgeben. Informationen zu sa_restartfinden Sie in der Subroutine signal .
|
| Element | Beschreibung |
|---|---|
| EIO | Der Prozess ist Mitglied einer Hintergrundprozessgruppe, die versucht, einen Schreibvorgang an seinem Steuerterminal auszuführen, das Flag TOSTOP ist gesetzt, der Prozess ignoriert oder blockiert das Signal SIGTTOU nicht und die Prozessgruppe des Prozesses hat keinen übergeordneten Prozess. |
| ENOSPC | Auf der Einheit, die die Datei enthält, verbleibt kein freier Speicherbereich mehr. |
| EOVERFLOW | Im Modus UNIX03 ist die Subroutine snprintf oder vsnprintf nicht erfolgreich, wenn der Wert des Parameters 'Number' größer als der Wert von INT_MAXist. Hinweis: Das Verhalten von UNIX03 ist aktiviert, wenn der Wert der Umgebungsvariablen XPG_SUS_ENV auf ON gesetzt ist.
|
| EPIPE | Es wurde versucht, in eine Pipe oder FIFO (First In/First Out) zu schreiben, die von keinem Prozess gelesen werden kann. Ein SIGPIPE -Signal wird an den Prozess gesendet. |
Die Subroutine printf, fprintf, sprintf, snprintfoder wsprintf kann nicht erfolgreich sein, wenn mindestens eine der folgenden Bedingungen zutrifft:
| Element | Beschreibung |
|---|---|
| EILSEQ | Es wurde eine ungültige Zeichenfolge erkannt. |
| EINVAL | Der Parameter Format hat unzureichende Argumente empfangen. |
| ENOMEM | Es ist nicht genügend Speicherplatz verfügbar. |
| ENXIO | Es wurde eine nicht vorhandene Einheit angefordert oder die Anforderung lag außerhalb des Leistungsspektrums der Einheit. |
Beispiele
Das folgende Beispiel veranschaulicht, wie die Subroutine vfprintf zum Schreiben einer Fehlerroutine verwendet werden kann:
#include <stdio.h>
#include <stdarg.h>
/* The error routine should be called with the
syntax: */
/* error(routine_name, Format
[, value, . . . ]); */
/*VARARGS0*/
void error(char *fmt, . . .);
/* ** Note that the function name and
Format arguments cannot be **
separately declared because of the **
definition of varargs. */ {
va_list args;
va_start(args, fmt);
/*
** Display the name of the function
that called the error routine */
fprintf(stderr, "ERROR in %s: ",
va_arg(args, char *)); /*
** Display the remainder of the message
*/
fmt = va_arg(args, char *);
vfprintf(fmt, args);
va_end(args);
abort(); }