vsscanf_s
, vswscanf_s
Odczytuje sformatowane dane z ciągu. Te wersje programu vsscanf
vswscanf
mają ulepszenia zabezpieczeń zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT.
Składnia
int vsscanf_s(
const char *buffer,
const char *format,
va_list argptr
);
int vswscanf_s(
const wchar_t *buffer,
const wchar_t *format,
va_list arglist
);
Parametry
buffer
Przechowywane dane
format
Ciąg kontroli formatu. Aby uzyskać więcej informacji, zobacz Pola specyfikacji formatu: scanf
i wscanf
funkcje.
arglist
Lista argumentów zmiennej.
Wartość zwracana
Każda z tych funkcji zwraca liczbę pól, które zostały pomyślnie przekonwertowane i przypisane. 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. Wartość zwracana jest EOF
dla błędu lub jeśli koniec ciągu zostanie osiągnięty przed pierwszą konwersją.
Jeśli buffer
lub 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 wykonanie może kontynuować, te funkcje zwracają wartość -1 i ustawiają wartość errno
EINVAL
.
Aby uzyskać informacje o tych i innych kodach błędów, zobacz errno
, _doserrno
, _sys_errlist
i _sys_nerr
.
Uwagi
Funkcja vsscanf_s
odczytuje dane z buffer
lokalizacji, które są podane przez każdy argument na arglist
liście argumentów. Argumenty na liście argumentów określają wskaźniki do zmiennych, które mają typ odpowiadający specyfikatorowi typu w programie format
. W przeciwieństwie do mniej bezpiecznej wersji vsscanf
parametr rozmiaru buforu jest wymagany w przypadku używania znaków pól typu c, C, s, S lub zestawów kontrolek ciągów, które są ujęte w []. Rozmiar buforu w znakach musi być podany jako inny parametr bezpośrednio po każdym parametrze buforu, który go wymaga.
Rozmiar buforu zawiera wartość null zakończenia. Pole specyfikacji szerokości może służyć do zapewnienia, ż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.
Aby uzyskać więcej informacji, zobacz scanf_s
, _scanf_s_l
, _wscanf_s_l
wscanf_s
i scanf Type Field Characters (Znaki pól typu scanf).
Uwaga
Parametr rozmiaru jest typu unsigned
, a nie size_t
.
format
Argument steruje interpretacją pól wejściowych i ma taką samą formę i funkcję jak format
argument funkcjiscanf_s
. Jeśli kopiowanie odbywa się między nakładającymi się ciągami, zachowanie jest niezdefiniowane.
vswscanf_s
jest wersją szerokoznakową ; vsscanf_s
argumenty, które mają vswscanf_s
być ciągami o szerokim znaku. vsscanf_s
nie obsługuje znaków szesnastkowy wielobajtowych. vswscanf_s
Nie obsługuje znaków szesnastkowe ani "strefa zgodności" w formacie Unicode o pełnej szerokości. vswscanf_s
W przeciwnym razie i vsscanf_s
zachowują się identycznie.
Mapowania procedur tekstu ogólnego
Procedura TCHAR.H | _UNICODE i _MBCS niezdefiniowane |
_MBCS zdefiniowany |
_UNICODE zdefiniowany |
---|---|---|---|
_vstscanf_s |
vsscanf_s |
vsscanf_s |
vswscanf_s |
Wymagania
Procedura | Wymagany nagłówek |
---|---|
vsscanf_s |
<stdio.h> |
vswscanf_s |
<stdio.h> lub <wchar.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Przykład
// crt_vsscanf_s.c
// compile with: /W3
// This program uses vsscanf_s to read data items
// from a string named tokenstring, then displays them.
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
int call_vsscanf_s(char *tokenstring, char *format, ...)
{
int result;
va_list arglist;
va_start(arglist, format);
result = vsscanf_s(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_s(tokenstring, "%80s", s, _countof(s));
call_vsscanf_s(tokenstring, "%c", &c, sizeof(char));
call_vsscanf_s(tokenstring, "%d", &i);
call_vsscanf_s(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
Zobacz też
We/Wy strumienia
scanf
, , _scanf_l
, , wscanf
_wscanf_l
sscanf
, , _sscanf_l
, , swscanf
_swscanf_l
sscanf_s
, , _sscanf_s_l
, , swscanf_s
_swscanf_s_l
sprintf
, , _sprintf_l
, swprintf
, , _swprintf_l
__swprintf_l
vsscanf
, vswscanf