Freigeben über


vfscanf_s, vfwscanf_s

Liest formatierte Daten aus einem Stream. Diese Versionen von vfscanf, vfwscanf haben Sicherheitsverbesserungen, wie in den Sicherheitsfeatures in der CRT beschrieben.

Syntax

int vfscanf_s(
   FILE *stream,
   const char *format,
   va_list arglist
);
int vfwscanf_s(
   FILE *stream,
   const wchar_t *format,
   va_list arglist
);

Parameter

stream
Zeiger zur FILE -Struktur.

format
Formatsteuerzeichenfolge.

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. Wenn ein Fehler auftritt oder das Ende des Dateistreams vor der ersten Konvertierung erreicht wird, ist der Rückgabewert EOF für vfscanf_s und vfwscanf_s.

Diese Funktionen überprüfen ihre Parameter. Wenn stream es sich um einen ungültigen Dateizeiger handelt oder format ein Nullzeiger ist, rufen diese Funktionen den ungültigen Parameterhandler auf, wie in der Parameterüberprüfung beschrieben. Wenn die weitere Ausführung zugelassen wird, geben diese Funktionen EOF zurück und stellen errno auf EINVAL ein.

Hinweise

Die vfscanf_s-Funktion liest Daten aus der aktuellen Position von stream in die Speicherorte, die von der arglist-Argumentliste angegeben werden (falls vorhanden). Jedes Argument in der Liste muss ein Zeiger auf einen Variablentyp sein, der einem Typspezifizierer in format entspricht. format steuert die Interpretation der Eingabefelder und weist dasselbe Formular und dieselbe Funktion wie das format Argument auf scanf_s; siehe Formatspezifikationsfelder: scanf und wscanf Funktionen für eine Beschreibung von format. vfwscanf_s ist eine Breitzeichenversion von vfscanf_s. Das vfwscanf_s-Formatargument ist eine Breitzeichenfolge. Diese Funktionen verhalten sich identisch, wenn der Stream im ANSI-Modus geöffnet ist. vfscanf_s unterstützt derzeit nicht die Eingabe aus einem UNICODE-Stream.

Der Hauptunterschied zwischen den sichereren Funktionen (mit dem _s-Suffix) und den anderen Versionen ist, dass die sichereren Funktionen es erfordern, dass die Größe in Zeichen von jedem c, C, s, S und [-Typfeld als Argument sofort nach der folgenden Variablen übergeben werden muss. Weitere Informationen finden Sie unter scanf_s, , _scanf_s_l, _wscanf_s_lwscanf_s und scanf Breite Spezifikation.

Hinweis

Der Größenparameter ist vom Typ unsigned und nicht vom Typ size_t.

Mapping generischer Textroutinen

TCHAR.H-Routine _UNICODE und _MBCS nicht definiert _MBCS definiert _UNICODE definiert
_vftscanf_s vfscanf_s vfscanf_s vfwscanf_s

Anforderungen

Funktion Erforderlicher Header
vfscanf_s <stdio.h>
vfwscanf_s <stdio.h> oder <wchar.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Beispiel

// crt_vfscanf_s.c
// compile with: /W3
// This program writes formatted
// data to a file. It then uses vfscanf_s to
// read the various data back from the file.

#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>

FILE *stream;

int call_vfscanf_s(FILE * istream, char * format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vfscanf_s(istream, format, arglist);
    va_end(arglist);
    return result;
}

int main(void)
{
    long l;
    float fp;
    char s[81];
    char c;

    if (fopen_s(&stream, "vfscanf_s.out", "w+") != 0)
    {
        printf("The file vfscanf_s.out was not opened\n");
    }
    else
    {
        fprintf(stream, "%s %ld %f%c", "a-string",
            65000, 3.14159, 'x');
        // Security caution!
        // Beware loading data from a file without confirming its size,
        // as it may lead to a buffer overrun situation.

        // Set pointer to beginning of file:
        fseek(stream, 0L, SEEK_SET);

        // Read data back from file:
        call_vfscanf_s(stream, "%s %ld %f%c", s, _countof(s), &l, &fp, &c, 1);

        // Output data read:
        printf("%s\n", s);
        printf("%ld\n", l);
        printf("%f\n", fp);
        printf("%c\n", c);

        fclose(stream);
    }
}
a-string
65000
3.141590
x

Siehe auch

Stream-E/A
_cscanf_s, , _cscanf_s_l_cwscanf_s_cwscanf_s_l
fprintf_s, , _fprintf_s_lfwprintf_s_fwprintf_s_l
scanf_s, , _scanf_s_lwscanf_s_wscanf_s_l
sscanf_s, , _sscanf_s_lswscanf_s_swscanf_s_l
fscanf, , _fscanf_lfwscanf_fwscanf_l
vfscanf, vfwscanf