Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Čte formátovaná data z řetězce. K dispozici jsou bezpečnější verze těchto funkcí; viz vsscanf_s, vswscanf_s.
Syntaxe
int vsscanf(
const char *buffer,
const char *format,
va_list arglist
);
int vswscanf(
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 čte data z buffer umístění, která jsou uvedena jednotlivými argumenty v seznamu argumentů arglist . Každý argument v seznamu musí být ukazatel na proměnnou, která má typ, který odpovídá specifikátoru typu v format. Argument format řídí interpretaci vstupních polí a má stejný tvar a funkci jako format argument funkce scanf . Pokud probíhá kopírování mezi řetězci, které se překrývají, chování není definováno.
Důležité
vsscanf Při čtení řetězce vždy zadejte šířku pro formát %s (například %32s místo %s). Jinak může nesprávně formátovaný vstup způsobit přetečení vyrovnávací paměti.
vswscanf je verze širokého znaku vsscanf; argumenty, které mají vswscanf být řetězce širokého znaku. vsscanf nezpracuje vícebajtové šestnáctkové znaky. vswscanf nezpracuje šestnáctkové znaky unicode s plnou šířkou nebo "zónou kompatibility". vswscanf V opačném případě se vsscanf chovejte stejně.
Mapování rutin obecného textu
| Rutina TCHAR.H | _UNICODE a _MBCS není definován |
_MBCS definovaný |
_UNICODE definovaný |
|---|---|---|---|
_vstscanf |
vsscanf |
vsscanf |
vswscanf |
Požadavky
| Rutina | Požadovaný hlavičkový soubor |
|---|---|
vsscanf |
<stdio.h> |
vswscanf |
<stdio.h> nebo <wchar.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
// crt_vsscanf.c
// compile with: /W3
// This program uses vsscanf to read data items
// from a string named tokenstring, then displays them.
#include <stdio.h>
#include <stdarg.h>
int call_vsscanf(char *tokenstring, char *format, ...)
{
int result;
va_list arglist;
va_start(arglist, format);
result = vsscanf(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(tokenstring, "%80s", s);
call_vsscanf(tokenstring, "%c", &c);
call_vsscanf(tokenstring, "%d", &i);
call_vsscanf(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
sprintf, _sprintf_l, swprintf, , _swprintf_l__swprintf_l
vsscanf_s, vswscanf_s