Zeiger auf eine nullterminierte breite Zeichenkette, aus der gelesen wird
format
-
Zeiger auf eine nullterminierte breite Zeichenkette, die angibt, wie die Eingabe gelesen wird
...
-
Empfangsargumente.
Die format-Zeichenkette besteht aus
Nicht-Leerraum-Breitzeichen außer %: Jedes solche Zeichen in der Formatzeichenkette verbraucht genau ein identisches Zeichen aus dem Eingabestream oder führt zum Fehlschlag der Funktion, wenn das nächste Zeichen im Stream nicht gleich ist.
Leerraumzeichen: Jedes einzelne Leerraumzeichen in der Formatzeichenkette verbraucht alle aufeinanderfolgenden Leerraumzeichen aus der Eingabe (bestimmt, als ob std::iswspace in einer Schleife aufgerufen würde). Beachten Sie, dass es keinen Unterschied zwischen "\n", " ", "\t\t" oder anderen Leerraumzeichen in der Formatzeichenkette gibt.
Konvertierungsspezifikationen. Jede Konvertierungsspezifikation hat das folgende Format:
Einleitendes %-Zeichen.
(optional) Zuweisungsunterdrückungszeichen *. Wenn diese Option vorhanden ist, weist die Funktion das Ergebnis der Konvertierung keinem Empfangsargument zu.
(optional) Ganzzahl (größer als Null), die die maximale Feldbreite angibt, d. h. die maximale Anzahl von Zeichen, die die Funktion bei der durch die aktuelle Konvertierungsspezifikation angegebenen Konvertierung verbrauchen darf. Beachten Sie, dass %s und %[ zu einem Pufferüberlauf führen können, wenn die Breite nicht angegeben ist.
(optional)Längenmodifikator, der die Größe des Empfangsarguments angibt, d. h. den tatsächlichen Zieltyp. Dies beeinflusst die Konvertierungsgenauigkeit und die Überlaufregeln. Der Standard-Zieltyp ist für jeden Konvertierungstyp unterschiedlich (siehe Tabelle unten).
Konvertierungsformatbezeichner.
Die folgenden Formatbezeichner sind verfügbar:
Konvertierungs- bezeichner
Erklärung
Erwarteter Argumenttyp
Längenmodifikator →
hh
h
keiner
l
ll
j
z
t
L
Nur verfügbar seit C++11 →
Ja
Ja
Ja
Ja
Ja
%
Entspricht dem Literal %.
N/V
N/V
N/V
N/V
N/V
N/V
N/V
N/V
N/V
c
Entspricht einem Zeichen oder einer Folge von Zeichen.
Wenn ein Breitenspezifizierer verwendet wird, werden genau Breite Breitzeichen gefunden (das Argument muss ein Zeiger auf ein Array mit ausreichendem Platz sein).
Im Gegensatz zu %s und %[ wird das Nullzeichen nicht an das Array angehängt.
N/V
N/V
char*
wchar_t*
N/V
N/V
N/V
N/V
N/V
s
Entspricht einer Folge von Nicht-Leerraumzeichen (einer Zeichenkette).
Wenn ein Breitenspezifizierer verwendet wird, werden maximal Breite Zeichen gefunden oder bis zum ersten Leerraumzeichen, je nachdem, was zuerst eintritt.
Zusätzlich zu den gefundenen Zeichen wird immer ein Nullzeichen gespeichert (daher muss das Argument-Array Platz für mindestens Breite+1 Zeichen haben).
[Menge ]
Entspricht einer nicht leeren Folge von Zeichen aus der Menge von Zeichen.
Wenn das erste Zeichen der Menge ^ ist, werden alle Zeichen, die nicht in der Menge sind, gefunden.
Wenn die Menge mit ] oder ^] beginnt, wird das Zeichen ] ebenfalls in die Menge aufgenommen.
Es ist implementierungsdefiniert, ob das Zeichen - an nicht-anfänglicher Position im Scanset einen Bereich angeben kann, wie in [0-9].
Wenn ein Breitenspezifizierer verwendet wird, werden nur maximal Breite Zeichen gefunden.
Zusätzlich zu den gefundenen Zeichen wird immer ein Nullzeichen gespeichert (daher muss das Argument-Array Platz für mindestens Breite+1 Zeichen haben).
d
Entspricht einer Dezimalzahl.
Das Zahlenformat ist dasselbe wie von std::wcstol mit dem Wert 10 für das base-Argument erwartet.
signedchar* oder unsignedchar*
signedshort* oder unsignedshort*
signedint* oder unsignedint*
signedlong* oder unsignedlong*
signedlonglong* oder unsignedlonglong*
std::intmax_t* oder std::uintmax_t*
std::size_t*
std::ptrdiff_t*
N/V
b(C++26)
Entspricht einer vorzeichenlosen Binärzahl.
Das Zahlenformat ist dasselbe wie von std::wcstoul mit dem Wert 2 für das base-Argument erwartet.
i
Entspricht einer Ganzzahl.
Das Zahlenformat ist dasselbe wie von std::wcstol mit dem Wert 0 für das base-Argument erwartet (Basis wird durch die ersten geparsten Zeichen bestimmt).
u
Entspricht einer vorzeichenlosen Dezimalzahl.
Das Zahlenformat ist dasselbe wie von std::wcstoul mit dem Wert 10 für das base-Argument erwartet.
o
Entspricht einer vorzeichenlosen Oktalzahl.
Das Zahlenformat ist dasselbe wie von std::wcstoul mit dem Wert 8 für das base-Argument erwartet.
x X
Entspricht einer vorzeichenlosen Hexadezimalzahl.
Das Zahlenformat ist dasselbe wie von std::wcstoul mit dem Wert 16 für das base-Argument erwartet.
n
Gibt die Anzahl der bisher gelesenen Zeichen zurück.
Es wird keine Eingabe verbraucht. Erhöht die Zuweisungsanzahl nicht.
Wenn der Spezifizierer einen Zuweisungsunterdrückungsoperator hat, ist das Verhalten undefiniert.
a(C++11) A(C++11) e E f F(C++11) g G
Entspricht einer Gleitkommazahl.
Das Zahlenformat ist dasselbe wie von std::wcstof erwartet.
N/V
N/V
float*
double*
N/V
N/V
N/V
N/V
longdouble*
p
Entspricht einer implementationsdefinierten Zeichensequenz, die einen Zeiger definiert.
printfDie %p-Familie von Funktionen sollte die gleiche Sequenz mit dem Formatbezeichner
erzeugen.
N/V
void**
N/V
N/V
N/V
N/V
N/V
N/V
Anmerkungen
Für jeden Konvertierungsspezifizierer außer n wird die längste Folge von Eingabezeichen, die keine angegebene Feldbreite überschreitet und die entweder genau das ist, was der Konvertierungsspezifizierer erwartet, oder ein Präfix einer solchen erwarteten Folge ist, vom Stream verbraucht. Das erste Zeichen, falls vorhanden, nach dieser verbrauchten Folge bleibt ungelesen. Wenn die verbrauchte Folge die Länge Null hat oder wenn die verbrauchte Folge nicht wie oben angegeben konvertiert werden kann, tritt ein Übereinstimmungsfehler auf, es sei denn, ein Dateiende, ein Kodierungsfehler oder ein Lesefehler verhinderte die Eingabe vom Stream, in diesem Fall liegt ein Eingabefehler vor.
Mit Ausnahme des %-Spezifizierers wird das Eingabeelement (oder für %n die Anzahl der Eingabezeichen) zunächst in einen zum Konvertierungsspezifizierer passenden Typ konvertiert. Sofern die Zuweisung nicht mit * unterdrückt wurde, wird das Ergebnis der Konvertierung in das Objekt geschrieben, auf das das nächste noch nicht beschriebene Argument zeigt. Wenn dieses Objekt keinen geeigneten Typ hat oder wenn das Ergebnis der Konvertierung nicht im Objekt dargestellt werden kann, ist das Verhalten undefiniert.
Alle Konvertierungsspezifizierer außer [, c und n verbrauchen und verwerfen alle führenden Leerraumzeichen (bestimmt, als ob std::iswspace aufgerufen würde), bevor sie versuchen, die Eingabe zu parsen. Diese verbrauchten Zeichen zählen nicht zur angegebenen maximalen Feldbreite.
Wenn der Längenspezifizierer l nicht verwendet wird, führen die Konvertierungsspezifizierer c, s und [ eine Breit-zu-Mehrbyte-Zeichenkonvertierung durch, als ob std::wcrtomb mit einem std::mbstate_t-Objekt aufgerufen würde, das vor der Konvertierung des ersten Zeichens auf Null initialisiert wurde.
Die Konvertierungsspezifizierer s und [ speichern zusätzlich zu den gefundenen Zeichen immer den Nullterminator. Die Größe des Zielarrays muss mindestens um eins größer sein als die angegebene Feldbreite. Die Verwendung von %s oder %[ ohne Angabe der Zielarraygröße ist genauso unsicher wie std::gets.
Nach der Aktion jedes Konvertierungsspezifizierers gibt es einen Sequenzpunkt; dies ermöglicht das Speichern mehrerer Felder in derselben „Senken“-Variablen.
Beim Parsen eines unvollständigen Gleitkommawerts, der im Exponenten ohne Ziffern endet, wie z. B. beim Parsen von "100er" mit dem Konvertierungsspezifizierer %f, wird die Sequenz "100e" (das längste Präfix einer möglicherweise gültigen Gleitkommazahl) verbraucht, was zu einem Übereinstimmungsfehler führt (die verbrauchte Sequenz kann nicht in eine Gleitkommazahl konvertiert werden), wobei "r" übrig bleibt. Einige vorhandene Implementierungen folgen dieser Regel nicht und machen einen Rückzieher, um nur "100" zu verbrauchen, wobei "er" übrig bleibt, z. B. glibc Fehler 1765.
Wenn eine Konvertierungsspezifikation ungültig ist, ist das Verhalten undefiniert.
Rückgabewert
Anzahl der erfolgreich gelesenen Argumente, oder
EOF
falls ein Fehler auftritt, bevor das erste empfangende Argument zugewiesen wurde.
Beispiel
Dieser Abschnitt ist unvollständig
Grund: Kein Beispiel