std:: wscanf, std:: fwscanf, std:: swscanf
|
Definiert in Header
<cwchar>
|
||
|
int
wscanf
(
const
wchar_t
*
format, ...
)
;
|
(1) | |
|
int
fwscanf
(
std::
FILE
*
stream,
const
wchar_t
*
format, ...
)
;
|
(2) | |
|
int
swscanf
(
const
wchar_t
*
buffer,
const
wchar_t
*
format, ...
)
;
|
(3) | |
Liest Daten aus verschiedenen Quellen, interpretiert sie gemäß
format
und speichert die Ergebnisse an den angegebenen Speicherorten.
stream
.
buffer
.
Inhaltsverzeichnis |
Parameter
| stream | - | Eingabedateistream zum Lesen |
| buffer | - | Zeiger auf einen nullterminierten Breitzeichen-String zum Lesen |
| format | - | Zeiger auf einen nullterminierten Breitzeichen-String zur Eingabesteuerung |
| ... | - | Empfangende Argumente. |
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 einem 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
|
Entspricht einem Zeichen oder einer Folge von Zeichen .
|
N/A | N/A |
char
*
|
wchar_t
*
|
N/A | N/A | N/A | N/A | N/A |
s
|
Entspricht einer Folge von Nicht-Leerzeichen (einer Zeichenkette ).
|
|||||||||
[
set
]
|
Entspricht einer nicht-leeren Zeichenfolge aus der set von Zeichen.
|
|||||||||
d
|
Erkennt eine dezimale Ganzzahl .
|
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
*
|
std::
intmax_t
*
oder
std::
uintmax_t
*
|
N/A | ||
i
|
Erkennt eine Ganzzahl .
|
|||||||||
u
|
Entspricht einem vorzeichenlosen Dezimalzahl .
|
|||||||||
o
|
Entspricht einer vorzeichenlosen Oktalzahl .
|
|||||||||
x
X
|
Erkennt eine vorzeichenlose hexadezimale Ganzzahl .
|
|||||||||
n
|
Gibt die Anzahl der bisher gelesenen Zeichen zurück.
|
|||||||||
a
(C++11)
A
(C++11)
e
E
f
F
(C++11)
g
G
|
Passt auf eine Gleitkommazahl .
|
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.
|
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 Folge 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 Stream konsumiert. Das erste Zeichen nach dieser konsumierten Sequenz bleibt ungelesen. Wenn die konsumierte Sequenz die Länge null hat oder wenn die konsumierte Sequenz 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 Stream, in welchem Fall es sich um einen Eingabefehler handelt. 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. Wenn 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 ermöglicht 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 befolgen diese Regel nicht und rollen zurück, um nur "100" zu konsumieren, wobei "er" übrig bleibt, z.B. glibc bug 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 |
Siehe auch
|
(C++11)
(C++11)
(C++11)
|
liest formatierten Breitzeichen-Input von
stdin
, einem Dateistream
oder einem Puffer unter Verwendung einer variablen Argumentenliste (Funktion) |
|
C-Dokumentation
für
wscanf
,
fwscanf
,
swscanf
|
|