Zeiger auf eine nullterminierte Breitzeichenkette, aus der gelesen wird
format
-
Zeiger auf eine nullterminierte Breitzeichenkette, die angibt, wie die Eingabe gelesen wird
vlist
-
Variable Argumentliste, die die empfangenden Argumente enthält.
Die Format-Zeichenkette besteht aus
Nicht-Leerraum-Breitzeichen, die nicht % sind: Jedes solche Zeichen in der Formatzeichenkette verbraucht genau ein identisches Zeichen aus dem Eingabestrom oder führt zum Fehlschlagen der Funktion, wenn das nächste Zeichen im Strom nicht gleich ist.
Leerraumzeichen: Ein einzelnes Leerraumzeichen in der Formatzeichenkette verbraucht alle verfügbaren 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 empfangenden Argument zu.
(optional) Ganzzahl (größer als Null), die die maximale Feldbreite angibt, d.h. die maximale Anzahl von Zeichen, die die Funktion bei der Konvertierung gemäß der aktuellen Konvertierungsspezifikation verbrauchen darf. Beachten Sie, dass %s und %[ zu einem Pufferüberlauf führen können, wenn die Breite nicht angegeben wird.
(optional)Längenmodifikator, der die Größe des empfangenden Arguments angibt, d.h. den tatsächlichen Zieltyp. Dies beeinflusst die Konvertierungsgenauigkeit und die Überlaufregeln. Der Standardzieltyp ist für jeden Konvertierungstyp unterschiedlich (siehe Tabelle unten).
Konvertierungsformatspezifizierer.
Die folgenden Formatspezifizierer sind verfügbar:
Konvertierungs spezifizierer
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/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
c
N/AEntspricht einem Zeichen oder einer Folge von Zeichen
.
Wenn ein Breitenspezifizierer verwendet wird, werden genau width
Breitzeichen abgeglichen (das Argument muss ein Zeiger auf ein Array mit ausreichend Platz sein). Im Gegensatz zu %s und
%[, wird das Nullzeichen nicht an das Array angehängt.
N/A
char*
wchar_t*
N/A
N/A
N/A
N/A
N/A
s
N/AEntspricht einer Folge von Nicht-Leerraumzeichen (einer Zeichenkette
).
Wenn ein Breitenspezifizierer verwendet wird, werden maximal width
Zeichen oder bis zum ersten Leerraumzeichen abgeglichen, je nachdem, was zuerst eintritt.Zusätzlich zu den abgeglichenen Zeichen wird immer ein Nullzeichen gespeichert (daher muss das Argumentarray Platz für mindestens width+1
[ Zeichen haben). ]
setEntspricht einer nicht leeren Zeichenfolge aus dem Zeichensatz set
.
^Wenn das erste Zeichen des Satzes
ist, werden alle Zeichen, die nicht im Satz sind, abgeglichen.]Wenn der Satz mit ^] oder ] beginnt, wird das Zeichen
ebenfalls in den Satz aufgenommen.-Es ist implementationsdefiniert, ob das Zeichen [0-9] an nicht-initialer Position im Scanset einen Bereich angeben darf, wie in
.Wenn ein Breitenspezifizierer verwendet wird, werden nur bis zu width
Zeichen abgeglichen.Zusätzlich zu den abgeglichenen Zeichen wird immer ein Nullzeichen gespeichert (daher muss das Argumentarray Platz für mindestens width+1
d
Zeichen haben).Entspricht einer Dezimalzahl
.
Das Zahlenformat entspricht dem, das von std::wcstol10 mit dem Wert base für das Basisargument erwartet wird.
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/A
b(C++26)
Entspricht einer vorzeichenlosen Binärzahl.
Das Zahlenformat entspricht dem, das von std::wcstoul mit dem Wert 2 für das Basisargument erwartet wird.baseEntspricht einer
i
Ganzzahl.
Das Zahlenformat entspricht dem, das von
std::wcstol mit dem Wert für das Basisargument erwartet wird (die Basis wird durch die ersten geparsten Zeichen bestimmt).0Entspricht einer vorzeichenlosen baseDezimalzahl
u
.
Das Zahlenformat entspricht dem, das von std::wcstoul
mit dem Wert für das Basisargument erwartet wird.Entspricht einer vorzeichenlosen 10Oktalzahlbase.
o
Das Zahlenformat entspricht dem, das von std::wcstoul mit dem Wert
für das Basisargument erwartet wird.Entspricht einer vorzeichenlosen Hexadezimalzahl8.
baseDas Zahlenformat entspricht dem, das von
x X
std::wcstoul mit dem Wert für das Basisargument erwartet wird.
Gibt die Anzahl der bisher gelesenen Zeichen zurück.
16Es werden keine Eingaben verbraucht. Erhöht nicht die Zuweisungsanzahl.baseWenn für den Spezifizierer der Zuweisungsunterdrückungsoperator definiert ist, ist das Verhalten undefiniert.
n
(C++11)(C++11)(C++11)
Entspricht einer
Gleitkommazahl
a.
ADas Zahlenformat entspricht dem, das von e E f Fstd::wcstof g G
erwartet wird.N/AN/A
N/AN/AN/A
N/A
N/A
float*
double*
Entspricht einer implementationsdefinierten Zeichenfolge, die einen
Zeiger
definiert.
Die
longdouble*
p
-Familie von Funktionen sollte dieselbe Sequenz mit dem Formatspezifizierer erzeugen.N/A
printfN/A%pN/A
N/A
N/A
void**
N/A
N/A
N/A
N/A
N/A
N/A
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 von ihm erwarteten Folge ist, vom Strom 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, das Dateiende, ein Kodierungsfehler oder ein Lesefehler haben die Eingabe vom Strom verhindert, in diesem Fall liegt ein Eingabefehler vor.
Außer für den %-Spezifizierer wird das Eingabeelement (oder für %n die Anzahl der Eingabezeichen) zuerst in einen für den Konvertierungsspezifizierer geeigneten 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 immer das Nullterminierungszeichen zusätzlich zu den abgeglichenen Zeichen. 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.
Es gibt einen Sequenzpunkt nach der Aktion jedes Konvertierungsspezifizierers; dies erlaubt das Speichern mehrerer Felder in derselben „Senken“-Variable.
Beim Parsen eines unvollständigen Gleitkommawerts, der mit einem 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 gehen zurück, um nur "100" zu verbrauchen, so dass "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
bei Auftreten eines Fehlers.
Beispiel
Dieser Abschnitt ist unvollständig
Grund: Kein Beispiel