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_errlist
und _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_l
wprintf
_wprintf_l
scanf
, , _scanf_l
wscanf
_wscanf_l
scanf_s
, , _scanf_s_l
wscanf_s
_wscanf_s_l
vscanf
, vwscanf