Sdílet prostřednictvím


vsscanf_s, vswscanf_s

Čte formátovaná data z řetězce. Tyto verze vsscanfmají vswscanf vylepšení zabezpečení, jak je popsáno v funkcích zabezpečení v CRT.

Syntaxe

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
Uložená data

format
Řetězec řízení formátu Další informace naleznete v tématu Pole specifikace formátu: scanf a wscanf funkce.

arglist
Seznam argumentů proměnných

Vrácená hodnota

Každá z těchto funkcí vrátí počet polí, která jsou úspěšně převedena a přiřazena. Vrácená hodnota neobsahuje pole, která byla přečtená, ale nepřiřazená. Vrácená hodnota 0 označuje, že nebyla přiřazena žádná pole. Vrácená hodnota je EOF pro chybu nebo pokud je dosaženo konce řetězce před prvním převodem.

Pokud buffer nebo format je NULL ukazatel, vyvolá se neplatná obslužná rutina parametru, jak je popsáno v ověření parametru. Pokud je povolené provádění pokračovat, vrátí tyto funkce hodnotu -1 a nastaví errno se na EINVALhodnotu .

Informace o těchto a dalších kódech chyb naleznete v tématu , , , a_sys_nerr . _sys_errlist_doserrnoerrno

Poznámky

Funkce vsscanf_s čte data z buffer umístění, která jsou uvedena jednotlivými argumenty v seznamu argumentů arglist . Argumenty v seznamu argumentů určují ukazatele na proměnné, které mají typ, který odpovídá specifikátoru typu v format. Na rozdíl od méně zabezpečené verze vsscanfse vyžaduje parametr velikosti vyrovnávací paměti při použití znaků pole typu c, C, s, S, S nebo sad ovládacích prvků řetězců, které jsou uzavřeny v [].. Velikost vyrovnávací paměti ve znaky musí být zadána jako další parametr bezprostředně za každým parametrem vyrovnávací paměti, který ho vyžaduje.

Velikost vyrovnávací paměti zahrnuje koncovou hodnotu null. Pole specifikace šířky lze použít k zajištění toho, aby se token, který je přečtený, vešl do vyrovnávací paměti. Pokud se nepoužije žádné pole specifikace šířky a čtení tokenu je příliš velké, aby se vešlo do vyrovnávací paměti, nic se do této vyrovnávací paměti nezapíše.

Další informace naleznete v tématu scanf_s, _scanf_s_lwscanf_s_wscanf_s_l, a scanf Typ Pole Znaky.

Poznámka

Parametr velikosti je typu unsigned, nikoli size_t.

Argument format řídí interpretaci vstupních polí a má stejný tvar a funkci jako format argument funkce scanf_s . Pokud ke kopírování dojde mezi řetězci, které se překrývají, chování není definováno.

vswscanf_s je verze širokého znaku vsscanf_s; argumenty, které mají vswscanf_s být řetězce širokého znaku. vsscanf_s nezpracuje vícebajtové šestnáctkové znaky. vswscanf_s nezpracuje šestnáctkové znaky unicode s plnou šířkou nebo "zónou kompatibility". vswscanf_s V opačném případě se vsscanf_s chovejte stejně.

Mapování rutin obecného textu

Rutina TCHAR.H _UNICODE a _MBCS není definován _MBCS Definovány _UNICODE Definovány
_vstscanf_s vsscanf_s vsscanf_s vswscanf_s

Požadavky

Rutina Požadovaný hlavičkový soubor
vsscanf_s <stdio.h>
vswscanf_s <stdio.h> nebo <wchar.h>

Další informace o kompatibilitě najdete v tématu Kompatibilita.

Příklad

// 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

Viz také

Vstupně-výstupní operace streamu
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