wscanf, fwscanf, swscanf, wscanf_s, fwscanf_s, swscanf_s
| Definiert in Header <wchar.h>
|
||
int wscanf( const wchar_t* format, ... );
|
(1) | (seit C95) (bis C99) |
int wscanf( const wchar_t* restrict format, ... );
|
(seit C99) | |
int fwscanf( FILE* stream, const wchar_t* format, ... );
|
(2) | (seit C95) (bis C99) |
int fwscanf( FILE* restrict stream,
const wchar_t* restrict format, ... );
|
(seit C99) | |
int swscanf( const wchar_t* buffer, const wchar_t* format, ... );
|
(3) | (seit C95) (bis C99) |
int swscanf( const wchar_t* restrict buffer,
const wchar_t* restrict format, ... );
|
(seit C99) | |
int wscanf_s( const wchar_t* restrict format, ...);
|
(4) | (seit C11) |
int fwscanf_s( FILE* restrict stream,
const wchar_t* restrict format, ...);
|
(5) | (seit C11) |
int swscanf_s( const wchar_t* restrict s,
const wchar_t* restrict format, ...);
|
(6) | (seit C11) |
Liest Daten aus einer Vielzahl von Quellen, interpretiert sie gemäß format und speichert die Ergebnisse an den angegebenen Stellen.
stream.buffer. Das Erreichen des Endes der Zeichenkette ist gleichbedeutend mit dem Erreichen der Dateiende-Bedingung für fwscanf%c, %s und %[ jeweils zwei Argumente erwarten (den üblichen Zeiger und einen Wert vom Typ rsize_t, der die Größe des empfangenden Arrays angibt, welcher 1 sein kann, wenn mit einem %lc in ein einzelnes breites Zeichen gelesen wird) und dass die folgenden Fehler zur Laufzeit erkannt werden und die derzeit installierte Constraint-Handler-Funktion aufrufen:
- jedes der Zeiger-Argumente ist ein Nullzeiger
format,streamoderbufferist ein Nullzeiger- die Anzahl der Zeichen, die durch
%c,%soder%[geschrieben würden, plus das abschließende Nullzeichen, würde das zweite (rsize_t) Argument für jeden dieser Konvertierungsspezifizierer überschreiten - optional jeder andere erkennbare Fehler, wie unbekannter Konvertierungsspezifizierer
wscanf_s, fwscanf_s und swscanf_s nur garantiert verfügbar, wenn __STDC_LIB_EXT1__ von der Implementierung definiert ist und der Benutzer __STDC_WANT_LIB_EXT1__ vor dem Einbinden von 1 auf die ganzzahlige Konstante < setzt.>wchar.hParameter
| stream | - | Eingabedateistrom, von dem gelesen wird |
| buffer | - | 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-Leerzeichen-Breitzeichen außer
%: Jedes solche Zeichen in der Formatzeichenkette verbraucht genau ein identisches Zeichen aus dem Eingabestrom oder führt dazu, dass die Funktion fehlschlägt, wenn das nächste Zeichen im Strom nicht gleich ist. - Leerzeichen: Jedes einzelne Leerzeichen in der Formatzeichenkette verbraucht alle verfügbaren aufeinanderfolgenden Leerzeichen aus der Eingabe (bestimmt, als ob durch Aufruf von iswspace in einer Schleife). Beachten Sie, dass es keinen Unterschied zwischen
"\n"," ","\t\t"oder anderen Leerzeichen in der Formatzeichenkette gibt. - Konvertierungsspezifikationen. Jede Konvertierungsspezifikation hat das folgende Format:
- Einleitendes
%-Zeichen.
- Einleitendes
- (optional) Zuweisungsunterdrückungszeichen
*. Wenn diese Option vorhanden ist, weist die Funktion das Ergebnis der Konvertierung keinem Empfangsargument zu.
- (optional) Zuweisungsunterdrückungszeichen
- (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
%sund%[zu einem Pufferüberlauf führen können, wenn die Breite nicht angegeben wird.
- (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
- (optional) Längenmodifikator, der die Größe des Empfangsarguments angibt, d.h. den tatsächlichen Zieltyp. Dies beeinflusst die Konvertierungsgenauigkeit und Überlaufregeln. Der Standard-Zieltyp ist für jeden Konvertierungstyp unterschiedlich (siehe Tabelle unten).
- Konvertierungsformat-Spezifizierer.
Die folgenden Format-Spezifizierer sind verfügbar:
| Konvertierungs spezifizierer |
Erklärung | Erwarteter Argumenttyp | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Längenmodifikator→ | hh
|
h
|
keiner | l
|
ll
|
j
|
z
|
t
|
L
| |
| Nur seit C99 verfügbar→ | Ja | Ja | Ja | Ja | Ja | |||||
%
|
Entspricht dem Literal
%. |
Entfällt | Entfällt | Entfällt | Entfällt | Entfällt | Entfällt | Entfällt | Entfällt | Entfällt |
c
|
Entspricht einem Zeichen oder einer Folge von Zeichen.
|
Entfällt | Entfällt | char* |
wchar_t* |
Entfällt | Entfällt | Entfällt | Entfällt | Entfällt |
s
|
Entspricht einer Folge von Nicht-Leerzeichen (einem String).
| |||||||||
[set ]
|
Entspricht einer nicht leeren Zeichenfolge aus der Zeichenmenge set.
| |||||||||
d
|
Entspricht einer Dezimalzahl.
|
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* |
intmax_t* oder uintmax_t* |
size_t* |
ptrdiff_t* |
Entfällt |
b (C23)
|
Entspricht einer vorzeichenlosen Binärzahl.
| |||||||||
i
|
Entspricht einer Ganzzahl.
| |||||||||
u
|
Entspricht einer vorzeichenlosen Dezimalzahl.
| |||||||||
o
|
Entspricht einer vorzeichenlosen Oktalzahl.
| |||||||||
xX
|
Entspricht einer vorzeichenlosen Hexadezimalzahl.
| |||||||||
n
|
Gibt die Anzahl der bisher gelesenen Zeichen zurück.
| |||||||||
a (C99)A (C99)eEfF (C99)gG
|
Entspricht einer Gleitkommazahl.
|
Entfällt | Entfällt | float* |
double* |
Entfällt | Entfällt | Entfällt | Entfällt | long double* |
p
|
Entspricht einer implementierungsdefinierten Zeichensequenz, die einen Zeiger definiert.
|
Entfällt | Entfällt | void** |
Entfällt | Entfällt | Entfällt | Entfällt | Entfällt | Entfällt |
| Anmerkungen | ||||||||||
|
Für jeden Konvertierungsspezifizierer außer Außer für den Alle Konvertierungsspezifizierer außer Wenn der Längenspezifizierer Die Konvertierungsspezifizierer Die korrekten Konvertierungsspezifikationen für die Ganzzahltypen mit fester Breite (int8_t, usw.) sind im Header <inttypes.h> definiert (obwohl SCNdMAX, SCNuMAX, usw. gleichbedeutend mit Es gibt einen Sequenzpunkt nach der Aktion jedes Konvertierungsspezifizierers; dies erlaubt das Speichern mehrerer Felder in derselben "Senken"-Variablen. Beim Parsen eines unvollständigen Gleitkommawerts, der im Exponenten ohne Ziffern endet, wie z.B. das Parsen von Wenn eine Konvertierungsspezifikation ungültig ist, ist das Verhalten undefiniert. | ||||||||||
Rückgabewert
Beispiel
#include <stdio.h>
#include <string.h>
#include <wchar.h>
#define NUM_VARS 3
#define ERR_READ 2
#define ERR_WRITE 3
int main(void)
{
wchar_t state[64];
wchar_t capital[64];
unsigned int population = 0;
int elevation = 0;
int age = 0;
float pi = 0;
#if INTERACTIVE_MODE
wprintf(L"Enter state, age, and pi value: ");
if (wscanf(L"%ls%d%f", state, &age, &pi) != NUM_VARS)
{
fprintf(stderr, "Error reading input.\n");
return ERR_READ;
}
#else
wchar_t* input = L"California 170 3.141592";
if (swscanf(input, L"%ls%d%f", state, &age, &pi) != NUM_VARS)
{
fprintf(stderr, "Error reading input.\n");
return ERR_READ;
}
#endif
wprintf(L"State: %ls\nAge : %d years\nPi : %.5f\n\n", state, age, pi);
FILE* fp = tmpfile();
if (fp)
{
// write some data to temp file
if (!fwprintf(fp, L"Mississippi Jackson 420000 807"))
{
fprintf(stderr, "Error writing to file.\n");
fclose(fp);
return ERR_WRITE;
}
// rewind file pointer
rewind(fp);
// read data into variables
fwscanf(fp, L"%ls%ls%u%d", state, capital, &population, &elevation);
wprintf(L"State : %ls\nCapital: %ls\nJackson population (in 2020): %u\n"
L"Highest elevation: %dft\n",
state, capital, population, elevation);
fclose(fp);
}
}
Mögliche Ausgabe:
State: California
Age : 170 years
Pi : 3.14159
State : Mississippi
Capital: Jackson
Jackson population (in 2020): 420000
Highest elevation: 807ft
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
- 7.29.2.2 Die fwscanf-Funktion (p: TBD)
- 7.29.2.4 Die swscanf-Funktion (p: TBD)
- 7.29.2.12 Die wscanf-Funktion (p: TBD)
- K.3.9.1.2 Die fwscanf_s-Funktion (p: TBD)
- K.3.9.1.5 Die swscanf_s-Funktion (p: TBD)
- K.3.9.1.14 Die wscanf_s-Funktion (p: TBD)
- C17-Standard (ISO/IEC 9899:2018):
- 7.29.2.2 Die fwscanf-Funktion (p: TBD)
- 7.29.2.4 Die swscanf-Funktion (p: TBD)
- 7.29.2.12 Die wscanf-Funktion (p: TBD)
- K.3.9.1.2 Die fwscanf_s-Funktion (p: TBD)
- K.3.9.1.5 Die swscanf_s-Funktion (p: TBD)
- K.3.9.1.14 Die wscanf_s-Funktion (p: TBD)
- C11-Standard (ISO/IEC 9899:2011):
- 7.29.2.2 Die fwscanf-Funktion (p: 410-416)
- 7.29.2.4 Die swscanf-Funktion (p: 417)
- 7.29.2.12 Die wscanf-Funktion (p: 421)
- K.3.9.1.2 Die fwscanf_s-Funktion (p: 628-629)
- K.3.9.1.5 Die swscanf_s-Funktion (p: 631)
- K.3.9.1.14 Die wscanf_s-Funktion (p: 638)
- C99-Standard (ISO/IEC 9899:1999):
- 7.24.2.2 Die fwscanf-Funktion (p: 356-362)
- 7.24.2.4 Die swscanf-Funktion (p: 362)
- 7.24.2.12 Die wscanf-Funktion (p: 366-367)
Siehe auch
(C99)(C99)(C99)(C11)(C11)(C11) |
liest formatierte breite Zeicheneingabe von stdin, einem Dateistrom oder einem Puffer unter Verwendung einer variablen Argumentliste (Funktion) |
C++-Dokumentation für wscanf, fwscanf, swscanf
| |