Freigeben über


vscanf_s, vwscanf_s

Liest formatierte Daten aus dem Standardeingabestream. Diese Versionen von vscanf, vwscanf verfügen über Sicherheitsverbesserungen, wie in sicherheitsfeatures im CRT beschrieben.

Syntax

int vscanf_s(
   const char *format,
   va_list arglist
);
int vwscanf_s(
   const wchar_t *format,
   va_list arglist
);

Parameter

format
Formatsteuerzeichenfolge.

arglist
Variablenargumentenliste.

Rückgabewert

Gibt die Anzahl der erfolgreich konvertierten und zugewiesenen Felder zurück. 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 ist im Fall eines Fehlers EOF. Dies gilt auch, wenn das Dateiendezeichen oder das Zeichenfolgeendezeichen beim ersten Versuch, das Zeichen zu lesen, erkannt wird. Wenn format es sich um einen NULL Zeiger handelt, wird der ungültige Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. Wenn die weitere Ausführung zugelassen wird, geben vscanf_s und vwscanf_s den Wert EOF zurück und setzen errno auf EINVAL.

Informationen zu diesen und anderen Fehlercodes finden Sie unter , , _doserrno, _sys_errlistund _sys_nerr.errno

Hinweise

Die vscanf_s-Funktion liest Daten aus dem Standardeingabestream stdin und schreibt die Daten in die Speicherorte, die durch die arglist-Argumentliste angegeben werden. Jedes Argument in der Liste muss ein Zeiger auf einen Variablentyp sein, der einem Typspezifizierer in format entspricht. Wenn der Kopiervorgang zwischen Zeichenfolgen ausgeführt wird, die sich überschneiden, ist das Verhalten nicht definiert.

vwscanf_s ist eine Breitzeichenversion von vscanf_s. Das format -Argument für vwscanf_s ist eine Breitzeichenfolge. vwscanf_s und vscanf_s verhalten sich identisch, wenn der Stream in ANSI-Modus geöffnet ist. vscanf_s unterstützt nicht die Eingabe aus einem UNICODE-Stream.

Im Gegensatz vscanf zu und vscanf_s vwscanf, und vwscanf_s erfordern, dass die Puffergröße für alle Eingabeparameter vom Typ c, C, s, S oder Zeichenfolgen-Steuerelementsätze angegeben werden muss, die in [] eingeschlossen sind. Die Puffergröße in Zeichen wird als anderer Parameter übergeben, der unmittelbar auf den Zeiger auf den Puffer oder die Variable folgt. Die Puffergröße in Zeichen für eine wchar_t Zeichenfolge entspricht nicht der Größe in Bytes.

Die Puffergröße enthält das abschließende NULL-Zeichen. Sie können ein Feld für die Breitenangabe verwenden, 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.

Hinweis

Der size Parameter ist vom Typ unsigned, nicht size_t.

Weitere Informationen finden Sie unter scanf Width Specification (scanf-Breitenangabe).

Mapping generischer Textroutinen

TCHAR.H-Routine _UNICODE und _MBCS nicht definiert _MBCS definiert _UNICODE definiert
_vtscanf_s vscanf_s vscanf_s vwscanf_s

Weitere Informationen finden Sie unter "Formatspezifikationsfelder: scanf und wscanf Funktionen".

Anforderungen

Routine Erforderlicher Header
vscanf_s <stdio.h>
wscanf_s <stdio.h> oder <wchar.h>

Die Konsole wird in UWP-Apps (Universelle Windows-Plattform) nicht unterstützt. Die mit der Konsole verknüpften Standardstreamhandles stdin, stdout und stderr müssen umgeleitet werden, bevor sie von C-Laufzeitfunktionen in UWP-Apps verwendet werden können. Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Beispiel

// crt_vscanf_s.c
// compile with: /W3
// This program uses the vscanf_s and vwscanf_s functions
// to read formatted input.

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

int call_vscanf_s(char *format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vscanf_s(format, arglist);
    va_end(arglist);
    return result;
}

int call_vwscanf_s(wchar_t *format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vwscanf_s(format, arglist);
    va_end(arglist);
    return result;
}

int main( void )
{
    int   i, result;
    float fp;
    char  c, s[81];
    wchar_t wc, ws[81];
    result = call_vscanf_s("%d %f %c %C %s %S", &i, &fp, &c, 1,
                           &wc, 1, s, _countof(s), ws, _countof(ws) );
    printf( "The number of fields input is %d\n", result );
    printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c, wc, s, ws);
    result = call_vwscanf_s(L"%d %f %hc %lc %S %ls", &i, &fp, &c, 2,
                            &wc, 1, s, _countof(s), ws, _countof(ws) );
    wprintf( L"The number of fields input is %d\n", result );
    wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp, c, wc, s, ws);
}

Wenn diesem Programm die Eingabe aus dem Beispiel übergeben wird, erzeugt es Folgendes:

71 98.6 h z Byte characters
36 92.3 y n Wide characters
The number of fields input is 6
The contents are: 71 98.599998 h z Byte characters
The number of fields input is 6
The contents are: 36 92.300003 y n Wide characters

Siehe auch

Mathematische Unterstützung und Gleitkommaunterstützung
Stream-E/A
Gebietsschema
printf, , _printf_lwprintf_wprintf_l
scanf, , _scanf_lwscanf_wscanf_l
scanf_s, , _scanf_s_lwscanf_s_wscanf_s_l
vscanf, vwscanf