Freigeben über


vsscanf, vswscanf

Liest formatierte Daten aus einer Zeichenfolge. Sicherere Versionen dieser Funktionen sind verfügbar; siehe 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 EINVALfest.

Informationen zu diesen und anderen Fehlercodes finden Sie unter , , _doserrno, _sys_errlistund _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.

Generische Textroutinzuordnungen

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