sscanf
, _sscanf_l
, , swscanf
_swscanf_l
Čtení formátovaných dat z řetězce K dispozici jsou bezpečnější verze těchto funkcí; viz sscanf_s
, _sscanf_s_l
, swscanf_s
, _swscanf_s_l
.
Syntaxe
int sscanf(
const char *buffer,
const char *format [,
argument ] ...
);
int _sscanf_l(
const char *buffer,
const char *format,
_locale_t locale [,
argument ] ...
);
int swscanf(
const wchar_t *buffer,
const wchar_t *format [,
argument ] ...
);
int _swscanf_l(
const wchar_t *buffer,
const wchar_t *format,
_locale_t locale [,
argument ] ...
);
Parametry
buffer
Uložená data
format
Řetězec řízení formátu Další informace naleznete v tématu Syntaxe specifikace formátu.
argument
Volitelné argumenty
locale
Národní prostředí, které se má použít
Vrácená hodnota
Každá z těchto funkcí 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. 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 EINVAL
hodnotu .
Informace o těchto a dalších kódech chyb naleznete v tématu , , , a_sys_nerr
. _sys_errlist
_doserrno
errno
Poznámky
Funkce sscanf
čte data z buffer
umístění zadaného jednotlivými argument
funkcemi . Každý argument
musí být ukazatel na proměnnou s typem, 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.
Informace o znaky pole typu scanf naleznete v části scanf
Znaky pole typu. Informace o polích specifikace formátu scanf naleznete v tématu Pole specifikace formátu.
Důležité
Při čtení řetězce s řetězcem sscanf
vždy zadejte šířku formátu %s
(například "%32s
" místo "%s
"); jinak nesprávně formátovaný vstup může snadno způsobit přetečení vyrovnávací paměti.
swscanf
je verze širokého znaku sscanf
; argumenty, které mají swscanf
být řetězce širokého znaku. sscanf
nezpracuje vícebajtové šestnáctkové znaky. swscanf
nezpracuje šestnáctkové znaky unicode s plnou šířkou nebo "zónou kompatibility". swscanf
V opačném případě se sscanf
chovejte stejně.
Verze těchto funkcí s příponou _l
jsou shodné s tím rozdílem, že používají parametr národního prostředí předaný místo aktuálního národního prostředí vlákna.
Mapování rutin obecného textu
TCHAR.H rutina |
_UNICODE a _MBCS není definován |
_MBCS definovaný |
_UNICODE definovaný |
---|---|---|---|
_stscanf |
sscanf |
sscanf |
swscanf |
_stscanf_l |
_sscanf_l |
_sscanf_l |
_swscanf_l |
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
sscanf , _sscanf_l |
<stdio.h> |
swscanf , _swscanf_l |
<stdio.h> nebo <wchar.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
// crt_sscanf.c
// compile with: /W3
// This program uses sscanf to read data items
// from a string named tokenstring, then displays them.
#include <stdio.h>
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:
sscanf( tokenstring, "%80s", s ); // C4996
sscanf( tokenstring, "%c", &c ); // C4996
sscanf( tokenstring, "%d", &i ); // C4996
sscanf( tokenstring, "%f", &fp ); // C4996
// Note: sscanf is deprecated; consider using sscanf_s instead
// 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
fscanf
, _fscanf_l
, , fwscanf
_fwscanf_l
scanf
, _scanf_l
, , wscanf
_wscanf_l
sprintf
, _sprintf_l
, swprintf
, , _swprintf_l
__swprintf_l
snprintf
, _snprintf
, _snprintf_l
, , _snwprintf
_snwprintf_l