Freigeben über


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 EINVALfest.

Informationen zu diesen und anderen Fehlercodes finden Sie unter , , _doserrno, _sys_errlistund _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 vsscanfist 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_lwscanf_wscanf_l
sscanf, , _sscanf_lswscanf_swscanf_l
sscanf_s, , _sscanf_s_lswscanf_s_swscanf_s_l
sprintf, , _sprintf_lswprintf, , _swprintf_l__swprintf_l
vsscanf, vswscanf