vsscanf_s
, vswscanf_s
Liest formatierte Daten aus einer Zeichenfolge. Diese Versionen von vsscanf
, vswscanf
verfügen über Sicherheitsverbesserungen, wie in sicherheitsfeatures im CRT beschrieben.
Syntax
int vsscanf_s(
const char *buffer,
const char *format,
va_list argptr
);
int vswscanf_s(
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_s
-Funktion liest Daten von buffer
in die Speicherorte, die in der arglist
-Argumentliste von jedem Argument angegeben werden. Die Argumente in der Argumentliste geben Zeiger zu den Variablen an, die einen Typ haben, der einem Typspezifizierer in format
entspricht. Im Gegensatz zur weniger sicheren Version vsscanf
ist ein Parameter für die Puffergröße erforderlich, wenn Sie die Typfeldzeichen c, C, s, S, S oder Zeichenfolgensteuerelementsätze verwenden, die in [] eingeschlossen sind. Die Puffergröße in Zeichen muss unmittelbar nach jedem Pufferparameter, der erforderlich ist, als weiterer Parameter angegeben werden.
Die Puffergröße enthält das abschließende NULL-Zeichen. Ein Feld für die Breitenangabe muss verwendet werden, um sicherzustellen, dass das eingelesene Token in den Puffer passt. Wenn kein Feld für die Breiteangabe verwendet wird und das Tokenlesefeld zu groß ist, um in den Puffer zu passen, wird nichts in diesen Puffer geschrieben.
Weitere Informationen finden Sie unter , , wscanf_s
_scanf_s_l
, _wscanf_s_l
und scanf Type Field Characters.scanf_s
Hinweis
Der Größenparameter ist vom Typ unsigned
und nicht vom Typ size_t
.
Das format
-Argument steuert die Interpretation der Eingabefelder und hat die gleiche Form und Funktion wie das format
-Argument für die scanf_s
-Funktion. Wenn der Kopiervorgang zwischen Zeichenfolgen ausgeführt wird, die sich überschneiden, ist das Verhalten nicht definiert.
vswscanf_s
ist eine Breitzeichenversion von vsscanf_s
. Die Argumente für vswscanf_s
sind Zeichenfolgen mit Breitzeichen. vsscanf_s
behandelt keine Multibyte-Hexadezimalzeichen. vswscanf_s
behandelt keine Hexadezimal- oder "Kompatibilitätszone"-Zeichen in Unicode. Andernfalls verhalten sich vswscanf_s
und vsscanf_s
identisch.
Mapping generischer Textroutinen
TCHAR.H-Routine | _UNICODE und _MBCS nicht definiert |
_MBCS definiert |
_UNICODE definiert |
---|---|---|---|
_vstscanf_s |
vsscanf_s |
vsscanf_s |
vswscanf_s |
Anforderungen
Routine | Erforderlicher Header |
---|---|
vsscanf_s |
<stdio.h> |
vswscanf_s |
<stdio.h> oder <wchar.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// crt_vsscanf_s.c
// compile with: /W3
// This program uses vsscanf_s to read data items
// from a string named tokenstring, then displays them.
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
int call_vsscanf_s(char *tokenstring, char *format, ...)
{
int result;
va_list arglist;
va_start(arglist, format);
result = vsscanf_s(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_s(tokenstring, "%80s", s, _countof(s));
call_vsscanf_s(tokenstring, "%c", &c, sizeof(char));
call_vsscanf_s(tokenstring, "%d", &i);
call_vsscanf_s(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
sscanf_s
, , _sscanf_s_l
swscanf_s
_swscanf_s_l
sprintf
, , _sprintf_l
swprintf
, , _swprintf_l
__swprintf_l
vsscanf
, vswscanf