Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Odczytuje sformatowane dane ze standardowego strumienia wejściowego. Te wersje programu vscanf
vwscanf
mają ulepszenia zabezpieczeń zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT.
Składnia
int vscanf_s(
const char *format,
va_list arglist
);
int vwscanf_s(
const wchar_t *format,
va_list arglist
);
Parametry
format
Formatuj ciąg sterujący.
arglist
Lista argumentów zmiennej.
Wartość zwracana
Zwraca liczbę pól pomyślnie przekonwertowanych i przypisanych; wartość zwracana nie zawiera pól, które zostały odczytane, ale nie zostały przypisane. Wartość zwracana 0 wskazuje, że żadne pola nie zostały przypisane. Zwracana wartość jest EOF
błędem lub jeśli napotkano znak końca pliku lub znak końca ciągu w pierwszej próbie odczytania znaku. Jeśli format
jest wskaźnikiem NULL
, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania, vscanf_s
i zwracanie vwscanf_s
EOF
i ustawianie wartości errno
.EINVAL
Aby uzyskać informacje o tych i innych kodach błędów, zobacz errno
, _doserrno
, _sys_errlist
i _sys_nerr
.
Uwagi
Funkcja vscanf_s
odczytuje dane ze standardowego strumienia stdin
wejściowego i zapisuje dane w lokalizacjach, które są podane przez arglist
listę argumentów. Każdy argument na liście musi być wskaźnikiem do zmiennej typu odpowiadającej specyfikatorowi typu w programie format
. Jeśli kopiowanie odbywa się między nakładającymi się ciągami, zachowanie jest niezdefiniowane.
vwscanf_s
jest wersją szerokoznakową ; vscanf_s
argument to format
vwscanf_s
ciąg o szerokim znaku. vwscanf_s
i vscanf_s
zachowuje się identycznie, jeśli strumień jest otwarty w trybie ANSI. vscanf_s
nie obsługuje danych wejściowych ze strumienia UNICODE.
W przeciwieństwie do vscanf
parametrów i vscanf_s
vwscanf
i vwscanf_s
wymagają określenia rozmiaru buforu dla wszystkich parametrów wejściowych typu c, C, s, S lub zestawów kontrolek ciągów, które są ujęte w []. Rozmiar buforu w znakach jest przekazywany jako inny parametr bezpośrednio po wskaźniku do buforu lub zmiennej. Rozmiar buforu w znakach ciągu wchar_t
nie jest taki sam jak rozmiar w bajtach.
Rozmiar buforu zawiera wartość null zakończenia. Możesz użyć pola width-specification, aby upewnić się, że token odczytany w pliku będzie pasował do buforu. Jeśli nie jest używane pole specyfikacji szerokości, a odczyt tokenu jest zbyt duży, aby zmieścić się w buforze, nic nie jest zapisywane w tym buforze.
Uwaga
Parametr size
jest typu unsigned
, a nie size_t
.
Aby uzyskać więcej informacji, zobacz scanf Width Specification (Specyfikacja szerokości scanf).
Mapowania procedur tekstu ogólnego
Procedura TCHAR.H | _UNICODE i _MBCS niezdefiniowane |
_MBCS zdefiniowany |
_UNICODE zdefiniowany |
---|---|---|---|
_vtscanf_s |
vscanf_s |
vscanf_s |
vwscanf_s |
Aby uzyskać więcej informacji, zobacz Pola specyfikacji formatu: scanf
i wscanf
funkcje.
Wymagania
Procedura | Wymagany nagłówek |
---|---|
vscanf_s |
<stdio.h> |
wscanf_s |
<stdio.h> lub <wchar.h> |
Konsola nie jest obsługiwana w aplikacjach platformy platforma uniwersalna systemu Windows (UWP). Standardowe dojścia strumienia skojarzone z konsolą programu stdin
, stdout
i i stderr
muszą zostać przekierowane, zanim funkcje czasu wykonywania języka C będą mogły ich używać w aplikacjach platformy UWP. Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Przykład
// 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);
}
Gdy ten program otrzymuje dane wejściowe w przykładzie, generuje następujące dane wyjściowe:
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
Zobacz też
Obsługa obliczeń matematycznych i zmiennoprzecinkowych
We/Wy strumienia
ustawienia regionalne
printf
, , _printf_l
, , wprintf
_wprintf_l
scanf
, , _scanf_l
, , wscanf
_wscanf_l
scanf_s
, , _scanf_s_l
, , wscanf_s
_wscanf_s_l
vscanf
, vwscanf