vwscanf, vfwscanf, vswscanf, vwscanf_s, vfwscanf_s, vswscanf_s
|
Definiert in Header
<wchar.h>
|
||
|
int
vwscanf
(
const
wchar_t
*
restrict
format, va_list vlist
)
;
|
(1) | (seit C99) |
|
int
vfwscanf
(
FILE
*
restrict
stream,
const wchar_t * restrict format, va_list vlist ) ; |
(2) | (seit C99) |
|
int
vswscanf
(
const
wchar_t
*
restrict
buffer,
const wchar_t * restrict format, va_list vlist ) ; |
(3) | (seit C99) |
|
int
vwscanf_s
(
const
wchar_t
*
restrict
format, va_list vlist
)
;
|
(4) | (seit C11) |
|
int
vfwscanf_s
(
FILE
*
restrict
stream,
const wchar_t * restrict format, va_list vlist ) ; |
(5) | (seit C11) |
|
int
vswscanf_s
(
const
wchar_t
*
restrict
buffer,
const wchar_t * restrict format, va_list vlist ) ; |
(6) | (seit C11) |
Liest Daten aus verschiedenen Quellen, interpretiert sie gemäß
format
und speichert die Ergebnisse an den durch
vlist
definierten Speicherorten.
stream
.
buffer
. Das Erreichen des Endes der Zeichenkette entspricht dem Erreichen der Dateiende-Bedingung für
fwscanf
-
- eines der Argumente vom Zeigertyp ist ein Nullzeiger
-
format,streamoderbufferist ein Nullzeiger - die Anzahl der Zeichen, die durch %c, %s oder %[ geschrieben würden, plus das abschließende Nullzeichen, das zweite (rsize_t) Argument überschreiten würden, das für jeden dieser Konvertierungsspezifizierer bereitgestellt wird
- optional jeder andere erkennbare Fehler, wie ein unbekannter Konvertierungsspezifizierer
-
Wie bei allen grenzprüfenden Funktionen sind
vwscanf_s,vfwscanf_sundvswscanf_snur garantiert verfügbar, wenn __STDC_LIB_EXT1__ durch die Implementierung definiert ist und wenn der Benutzer __STDC_WANT_LIB_EXT1__ auf die Integer-Konstante 1 setzt, bevor <stdio.h> eingebunden wird.
Inhaltsverzeichnis |
Parameter
| stream | - | Eingabedateistream, von dem gelesen wird |
| buffer | - | Zeiger auf einen nullterminierten Breitzeichen-String, von dem gelesen wird |
| format | - | Zeiger auf einen nullterminierten Breitzeichen-String, der angibt, wie die Eingabe gelesen wird |
| vlist | - | Variable Argumentenliste, die die empfangenden Argumente enthält |
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 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 von Zeichen, die die Funktion bei der Durchführung der durch die aktuelle Konvertierungsangabe spezifizierten 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 eigentlichen 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 C99→ | 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
*
|
size_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
(C99)
A
(C99)
e
E
f
F
(C99)
g
G
|
Passt auf eine Gleitkommazahl .
|
N/A | N/A |
float
*
|
double
*
|
N/A | N/A | N/A | N/A |
long
double
*
|
p
|
Entspricht einer implementierungsdefinierten 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 solchen Folge ist, aus dem Stream gelesen. Das erste Zeichen nach dieser gelesenen Folge bleibt ungelesen. Wenn die gelesene Folge die Länge null hat oder wenn die gelesene Folge nicht wie oben spezifiziert konvertiert werden kann, tritt ein Übereinstimmungsfehler auf, es sei denn, das Dateiende, ein Kodierungsfehler oder ein Lesefehler verhinderten die Eingabe aus dem Stream, in welchem Fall es sich um einen Eingabefehler handelt. Alle Konvertierungsspezifizierer außer [ , c und n lesen und verwerfen alle führenden Leerzeichen (bestimmt wie durch Aufruf von iswspace ), bevor sie versuchen, die Eingabe zu parsen. Diese gelesenen 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 wcrtomb mit einem 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 gets .
Die korrekten Konvertierungsspezifikationen für die
Festbreiten-Ganzzahltypen
(
int8_t
usw.) sind im Header
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 Folge "100e" (das längste Präfix einer möglicherweise gültigen Gleitkommazahl) gelesen, was zu einem Übereinstimmungsfehler führt (die gelesene Folge 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 lesen, wobei "er" übrig bleibt, z.B. glibc bug 1765 . Wenn eine Konvertierungsspezifikation ungültig ist, ist das Verhalten undefiniert. |
||||||||||
Rückgabewert
Hinweise
Alle diese Funktionen können
va_arg
aufrufen, der Wert von
arg
ist nach der Rückgabe unbestimmt. Diese Funktionen rufen
va_end
nicht auf, und dies muss vom Aufrufer durchgeführt werden.
Beispiel
|
Dieser Abschnitt ist unvollständig
Grund: Kein Beispiel |
Referenzen
- C11-Standard (ISO/IEC 9899:2011):
-
- 7.29.2.6 Die vfwscanf-Funktion (S: 418)
-
- 7.29.2.8 Die vswscanf-Funktion (S: 419)
-
- 7.29.2.10 Die vwscanf-Funktion (S: 420)
-
- K.3.9.1.7 Die vfwscanf_s-Funktion (S: 632-633)
-
- K.3.9.1.10 Die vswscanf_s-Funktion (S: 635-636)
-
- K.3.9.1.12 Die vwscanf_s-Funktion (S: 637)
- C99-Standard (ISO/IEC 9899:1999):
-
- 7.24.2.6 Die vfwscanf-Funktion (S: 364)
-
- 7.24.2.8 Die vswscanf-Funktion (S: 365)
-
- 7.24.2.10 Die vwscanf-Funktion (S: 366)
Siehe auch
|
(C95)
(C95)
(C95)
(C11)
(C11)
(C11)
|
Liest formatierte Breitzeichen-Eingabe von
stdin
, einem Dateistrom oder einem Puffer
(Funktion) |
|
C++-Dokumentation
für
vwscanf
,
vfwscanf
,
vswscanf
|
|