vsscanf
, vswscanf
Liest formatierte Daten aus einer Zeichenfolge. Sicherere Versionen dieser Funktionen sind verfügbar. Informationen dazu finden Sie unter vsscanf_s
, vswscanf_s
.
Syntax
int vsscanf(
const char *buffer,
const char *format,
va_list arglist
);
int vswscanf(
const wchar_t *buffer,
const wchar_t *format,
va_list arglist
);
Parameter
buffer
Gespeicherte Daten
format
Formatsteuerzeichenfolge. Weitere Informationen finden Sie unter "Formatspezifikationsfelder: scanf
und wscanf
Funktionen".
arglist
Variablenargumentenliste.
Rückgabewert
Jede dieser Funktionen gibt die Anzahl der Felder zurück, die erfolgreich konvertiert und zugewiesen wurden. Der Rückgabewert enthält keine Felder, die gelesen, aber nicht zugewiesen wurden. Ein Rückgabewert von 0 gibt an, dass keine Felder zugewiesen wurden. Der Rückgabewert bei einem Fehler oder beim Erreichen des Endes der Zeichenfolge vor der ersten Konvertierung lautet EOF
.
Wenn buffer
oder format
ein NULL
Zeiger ist, wird der ungültige Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. Wenn die weitere Ausführung zugelassen wird, geben diese Funktionen "– 1" zurück und legen errno
auf EINVAL
fest.
Informationen zu diesen und anderen Fehlercodes finden Sie unter , , _doserrno
, _sys_errlist
und _sys_nerr
.errno
Hinweise
Die vsscanf
-Funktion liest Daten von buffer
in die Speicherorte, die in der arglist
-Argumentliste von jedem Argument angegeben werden. Jedes Argument in der Liste muss ein Zeiger auf eine Variable sein, deren Typ einem Typspezifizierer in format
entspricht. Das format
-Argument steuert die Interpretation der Eingabefelder und hat die gleiche Form und Funktion wie das format
-Argument für die scanf
-Funktion. Wenn der Kopiervorgang zwischen Zeichenfolgen ausgeführt wird, die sich überschneiden, ist das Verhalten nicht definiert.
Wichtig
Wenn Sie eine Zeichenfolge lesen, geben Sie vsscanf
immer eine Breite für das Format %s an (z . B. "%32s" anstelle von "%s"); andernfalls kann eine falsch formatierte Eingabe zu einem Pufferüberlauf führen.
vswscanf
ist eine Breitzeichenversion von vsscanf
. Die Argumente für vswscanf
sind Zeichenfolgen mit Breitzeichen. vsscanf
behandelt keine Multibyte-Hexadezimalzeichen. vswscanf
behandelt keine Hexadezimal- oder "Kompatibilitätszone"-Zeichen in Unicode. Andernfalls verhalten sich vswscanf
und vsscanf
identisch.
Mapping generischer Textroutinen
TCHAR.H-Routine | _UNICODE und _MBCS nicht definiert |
_MBCS definiert |
_UNICODE definiert |
---|---|---|---|
_vstscanf |
vsscanf |
vsscanf |
vswscanf |
Anforderungen
Routine | Erforderlicher Header |
---|---|
vsscanf |
<stdio.h> |
vswscanf |
<stdio.h> oder <wchar.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// crt_vsscanf.c
// compile with: /W3
// This program uses vsscanf to read data items
// from a string named tokenstring, then displays them.
#include <stdio.h>
#include <stdarg.h>
int call_vsscanf(char *tokenstring, char *format, ...)
{
int result;
va_list arglist;
va_start(arglist, format);
result = vsscanf(tokenstring, format, arglist);
va_end(arglist);
return result;
}
int main( void )
{
char tokenstring[] = "15 12 14...";
char s[81];
char c;
int i;
float fp;
// Input various data from tokenstring:
// max 80 character string:
call_vsscanf(tokenstring, "%80s", s);
call_vsscanf(tokenstring, "%c", &c);
call_vsscanf(tokenstring, "%d", &i);
call_vsscanf(tokenstring, "%f", &fp);
// Output the data read
printf("String = %s\n", s);
printf("Character = %c\n", c);
printf("Integer: = %d\n", i);
printf("Real: = %f\n", fp);
}
String = 15
Character = 1
Integer: = 15
Real: = 15.000000
Siehe auch
Stream-E/A
scanf
, , _scanf_l
wscanf
_wscanf_l
sscanf
, , _sscanf_l
swscanf
_swscanf_l
sprintf
, , _sprintf_l
swprintf
, , _swprintf_l
__swprintf_l
vsscanf_s
, vswscanf_s