Namespaces
Variants

std:: vwscanf, std:: vfwscanf, std:: vswscanf

From cppreference.net
< cpp ‎ | io ‎ | c
Definiert im Header <cwchar>
int vwscanf ( const wchar_t * format, std :: va_list vlist ) ;
(1) (seit C++11)
int vfwscanf ( std:: FILE * stream, const wchar_t * format, std :: va_list vlist ) ;
(2) (seit C++11)
int vswscanf ( const wchar_t * buffer, const wchar_t * format, std :: va_list vlist ) ;
(3) (seit C++11)

Liest Daten aus verschiedenen Quellen, interpretiert sie gemäß format und speichert die Ergebnisse an durch vlist definierten Speicherorten.

1) Liest die Daten von stdin .
2) Liest die Daten aus dem Dateistrom stream .
3) Liest die Daten aus der nullterminierten Breitzeichen-Zeichenkette buffer .

Inhaltsverzeichnis

Parameter

stream - Eingabedateistream zum Lesen
buffer - Zeiger auf einen nullterminierten Breitzeichen-String zum Lesen
format - Zeiger auf einen nullterminierten Breitzeichen-String, der die Eingabeart spezifiziert
vlist - Variable Argumentenliste mit den empfangenden Argumenten


Die Format -Zeichenkette besteht aus

  • Nicht-Leerzeichen-Breitzeichen außer % : Jedes solche Zeichen im Formatstring konsumiert genau ein identisches Zeichen aus dem Eingabestrom oder führt zum Fehlschlagen der Funktion, falls das nächste Zeichen im Strom nicht gleich ist.
  • Leerzeichenzeichen: Jedes einzelne Leerzeichenzeichen im Formatstring konsumiert alle verfügbaren aufeinanderfolgenden Leerzeichenzeichen aus der Eingabe (bestimmt wie durch wiederholten Aufruf von std::iswspace ). Beachten Sie, dass es keinen Unterschied zwischen " \n " , " " , " \t \t " oder anderen Leerzeichen im Formatstring gibt.
  • Konvertierungsspezifikationen. Jede Konvertierungsspezifikation hat folgendes Format:
  • Einleitendes % Zeichen.
  • (optional) unterdrückendes Zuweisungszeichen * . 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, also die maximale Anzahl an Zeichen, die die Funktion bei der Durchführung der durch die aktuelle Konvertierungsspezifikation angegebenen Konvertierung verarbeiten darf. Beachten Sie, dass % s und % [ zu Pufferüberlauf führen können, wenn die Breite nicht angegeben wird.
  • (optional) Längenmodifikator , der die Größe des empfangenden Arguments angibt, also den tatsächlichen Zieltyp. Dies beeinflusst die Konvertierungsgenauigkeit und Überlaufregeln. Der Standardzieltyp ist für jeden Konvertierungstyp unterschiedlich (siehe Tabelle unten).
  • Konvertierungsformat-Spezifizierer.

Die folgenden Formatbezeichner sind verfügbar:

Konvertierungsspezifizierer
Erklärung Erwarteter
Argumenttyp
Längenmodifikator→ hh h keine 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

Erfasst ein Zeichen oder eine Folge von Zeichen .

  • Wenn eine Breitenangabe verwendet wird, erfasst es genau width Breitzeichen (das Argument muss ein Zeiger auf ein Array mit ausreichend Platz sein).
  • Im Gegensatz zu %s und %[ wird kein Nullzeichen an das Array angehängt.
N/A N/A
char *
wchar_t *
N/A N/A N/A N/A N/A
s

Entspricht einer Folge von Nicht-Leerzeichen (einem string ).

  • Wenn ein Breitenbezeichner verwendet wird, entspricht es bis zu width oder bis zum ersten Leerzeichen, je nachdem, was zuerst auftritt.
  • Speichert immer ein Nullzeichen zusätzlich zu den übereinstimmenden Zeichen (daher muss das Argument-Array Platz für mindestens width+1 Zeichen haben).
[ set  ]

Entspricht einer nicht-leeren Zeichenfolge aus der set von Zeichen.

  • Wenn das erste Zeichen der Menge ^ ist, werden alle Zeichen außerhalb der Menge erfasst.
  • Wenn die Menge mit ] oder ^] beginnt, wird das ] -Zeichen ebenfalls in die Menge aufgenommen.
  • Es ist implementierungsdefiniert, ob das Zeichen - an einer nicht-initialen Position im Scanset einen Bereich angeben kann, wie in [0-9] .
  • Wenn eine Breitenangabe verwendet wird, werden nur bis zu width Zeichen erfasst.
  • Speichert immer ein Nullzeichen zusätzlich zu den erfassten Zeichen (daher muss das Argument-Array Platz für mindestens width+1 Zeichen bieten).
d

Passt auf eine dezimale Ganzzahl .

  • Das Zahlenformat entspricht dem von std::wcstol mit dem Wert 10 für das base -Argument erwarteten.
signed char * oder unsigned char *
signed short * oder unsigned short *
signed int * oder unsigned int *
signed long * oder unsigned long *
signed long long * oder unsigned long long *
N/A
i

Erkennt eine Ganzzahl .

  • Das Zahlenformat entspricht dem von std::wcstol erwarteten Format mit dem Wert 0 für das base Argument (die Basis wird durch die ersten eingelesenen Zeichen bestimmt).
u

Entspricht einem vorzeichenlosen Dezimalzahl .

  • Das Format der Zahl ist identisch mit dem von std::wcstoul erwarteten Format mit dem Wert 10 für das base Argument.
o

Entspricht einer vorzeichenlosen Oktalzahl .

  • Das Zahlenformat entspricht dem von std::wcstoul mit dem Wert 8 für das base Argument erwarteten Format.
x
X

Erkennt eine vorzeichenlose hexadezimale Ganzzahl .

  • Das Zahlenformat entspricht dem von std::wcstoul mit dem Wert 16 für das base Argument erwarteten Format.
n

Gibt die Anzahl der bisher gelesenen Zeichen zurück.

  • Es wird keine Eingabe konsumiert. Erhöht nicht die Zuweisungsanzahl.
  • Wenn der Spezifizierer den Zuweisungsunterdrückungsoperator definiert hat, ist das Verhalten undefiniert.
a (C++11)
A (C++11)
e
E
f
F (C++11)
g
G

Passt auf eine Gleitkommazahl .

  • Das Zahlenformat entspricht dem von std::wcstof erwarteten Format.
N/A N/A
float *
double *
N/A N/A N/A N/A
long double *
p

Erfasst die implementierungsdefinierte Zeichensequenz, die einen Zeiger definiert.

  • printf -Funktionsfamilie sollte dieselbe Sequenz mit dem %p -Formatbezeichner erzeugen.
N/A N/A
void **
N/A N/A N/A N/A N/A N/A
Hinweise

Für jeden Konvertierungsspezifizierer außer n wird die längste Sequenz von Eingabezeichen, die keine spezifizierte Feldbreite überschreitet und die entweder genau dem entspricht, was der Konvertierungsspezifizierer erwartet, oder ein Präfix einer Sequenz ist, die er erwarten würde, aus dem Strom konsumiert. Das erste Zeichen nach dieser konsumierten Sequenz bleibt ungelesen. Falls die konsumierte Sequenz die Länge null hat oder nicht wie oben spezifiziert konvertiert werden kann, tritt ein Übereinstimmungsfehler auf, es sei denn, das Dateiende, ein Kodierungsfehler oder ein Lesefehler verhinderte die Eingabe aus dem Strom, in welchem Fall es ein Eingabefehler ist.

Alle Konvertierungsspezifizierer außer [ , c und n konsumieren und verwerfen alle führenden Leerzeichen (bestimmt wie durch Aufruf von std::iswspace ), bevor versucht wird, die Eingabe zu parsen. Diese konsumierten Zeichen zählen nicht zur spezifizierten maximalen Feldbreite.

Falls der Längenspezifizierer l nicht verwendet wird, führen die Konvertierungsspezifizierer c , s und [ eine Breitzeichen-zu-Multibyte-Zeichen-Konvertierung durch, als ob sie std::wcrtomb mit einem std::mbstate_t -Objekt aufrufen würden, das vor der Konvertierung des ersten Zeichens auf null initialisiert wurde.

Die Konvertierungsspezifizierer s und [ speichern immer den Nullterminator zusätzlich zu den übereinstimmenden Zeichen. Die Größe des Zielarrays muss mindestens um eins größer sein als die spezifizierte Feldbreite. Die Verwendung von % s oder % [ ohne Angabe der Zielarraygröße ist genauso unsicher wie std::gets .

Die korrekten Konvertierungsspezifikationen für die Festbreiten-Ganzzahltypen ( std::int8_t usw.) sind im Header <cinttypes> definiert (obwohl SCNdMAX , SCNuMAX usw. synonym mit % jd , % ju usw. ist).

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 im Exponenten ohne Ziffern endet, wie z.B. das Parsen von "100er" mit dem Konvertierungsspezifizierer % f , wird die Sequenz "100e" (das längste Präfix einer möglicherweise gültigen Gleitkommazahl) konsumiert, was zu einem Übereinstimmungsfehler führt (die konsumierte Sequenz kann nicht in eine Gleitkommazahl konvertiert werden), wobei "r" übrig bleibt. Einige bestehende Implementierungen folgen dieser Regel nicht und rollen zurück, um nur "100" zu konsumieren, wobei "er" übrig bleibt, z.B. glibc bug 1765 .

Falls eine Konvertierungsspezifikation ungültig ist, ist das Verhalten undefiniert.

Rückgabewert

Anzahl der erfolgreich gelesenen Argumente, oder EOF bei Auftreten eines Fehlers.

Beispiel

Siehe auch

liest formatierten Breitzeichen-Input von stdin , einem Dateistream oder einem Buffer
(Funktion)
C-Dokumentation für vwscanf , vfwscanf , vswscanf