Sdílet prostřednictvím


vscanf_s, vwscanf_s

Čte formátovaná data ze standardního vstupního datového proudu. Tyto verze vscanfmají vwscanf vylepšení zabezpečení, jak je popsáno v funkcích zabezpečení v CRT.

Syntaxe

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

Parametry

format
Formátovací řetězec ovládacího prvku

arglist
Seznam argumentů proměnných

Vrácená hodnota

Vrátí počet polí úspěšně převedených a přiřazených; návratová 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. Návratová hodnota je EOF pro chybu, nebo pokud se při prvním pokusu o přečtení znaku zobrazí znak konce souboru nebo znak konce řetězce. Pokud format je NULL ukazatel, je vyvolána neplatná obslužná rutina parametru, jak je popsáno v ověření parametru. Pokud je povoleno pokračovat vscanf_s provádění a vwscanf_s vrátit EOF a nastavit errno na EINVAL.

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

Poznámky

Funkce vscanf_s čte data ze standardního vstupního datového proudu stdin a zapisuje data do umístění, která jsou uvedena seznamem arglist argumentů. Každý argument v seznamu musí být ukazatel na proměnnou typu, která odpovídá specifikátoru typu v format. Pokud ke kopírování dojde mezi řetězci, které se překrývají, chování není definováno.

vwscanf_sje verze širokého znaku vscanf_sformat ; argument je vwscanf_s řetězec širokého znaku. vwscanf_s a vscanf_s chovejte se stejně, pokud je datový proud otevřen v režimu ANSI. vscanf_s nepodporuje vstup z datového proudu UNICODE.

Na rozdíl od vscanf a vwscanfvscanf_s a vwscanf_s vyžadují, aby velikost vyrovnávací paměti byla zadána pro všechny vstupní parametry typu c, C, s, S, S nebo sady ovládacích prvků řetězců, které jsou uzavřeny v []. Velikost vyrovnávací paměti ve znaky se předá jako jiný parametr bezprostředně za ukazatelem na vyrovnávací paměť nebo proměnnou. Velikost vyrovnávací paměti v znacích řetězce wchar_t není stejná jako velikost v bajtech.

Velikost vyrovnávací paměti zahrnuje koncovou hodnotu null. Pole specifikace šířky můžete 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.

Poznámka:

Parametr size je typu unsigned, nikoli size_t.

Další informace naleznete v tématu scanf Width Specification.

Mapování rutin obecného textu

Rutina TCHAR.H _UNICODE a _MBCS není definován _MBCS definovaný _UNICODE definovaný
_vtscanf_s vscanf_s vscanf_s vwscanf_s

Další informace naleznete v tématu Pole specifikace formátu: scanf a wscanf funkce.

Požadavky

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

Konzola není podporována v aplikacích pro Univerzální platforma Windows (UPW). Standardní zpracování datových proudů, které jsou přidružené ke konzole , a , stderrmusí být přesměrovány před tím, stdinstdoutnež je funkce runtime jazyka C mohou používat v aplikacích pro UPW. Další informace o kompatibilitě najdete v tématu Kompatibilita.

Příklad

// 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);
}

Když tento program dostane vstup v příkladu, vytvoří tento výstup:

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

Viz také

Podpora pro matematiku a plovoucí desetinou čárku
Vstupně-výstupní operace streamu
Národní prostředí
printf, _printf_l, , wprintf_wprintf_l
scanf, _scanf_l, , wscanf_wscanf_l
scanf_s, _scanf_s_l, , wscanf_s_wscanf_s_l
vscanf, vwscanf