sscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_l
Čtení formátovaných dat z řetězce.Tyto verze sscanf, _sscanf_l, swscanf, _swscanf_l mají rozšíření zabezpečení popsaná v tématu Funkce zabezpečení v CRT.
int sscanf_s(
const char *buffer,
const char *format [,
argument ] ...
);
int _sscanf_s_l(
const char *buffer,
const char *format,
locale_t locale [,
argument ] ...
);
int swscanf_s(
const wchar_t *buffer,
const wchar_t *format [,
argument ] ...
);
int _swscanf_s_l(
const wchar_t *buffer,
const wchar_t *format,
locale_t locale [,
argument ] ...
);
Parametry
buffer
Uložená dataformat
Řetězec řízení formátu.Další informace naleznete v tématu Pole specifikace formátu: funkce scanf a wscanf.argument
Volitelné argumentylocale
Použité národní prostředí
Vrácená hodnota
Každá z těchto funkcí vrátí počet polí úspěšně, která jsou úspěšně převedena a přidělena; vrácená hodnota nezahrnuje pole, která byla načtena, ale která nejsou přiřazena.Vrácená hodnota 0 označuje, že nebyla přiřazena žádná pole.Pokud dojde k chybě, nebo pokud je dosaženo konce souboru datového proudu před prvním převodem, vrácená hodnota je EOF.
Pokud buffer nebo format je ukazatel NULL, je vyvolán neplatný parametr obslužné rutiny, jak je popsáno v Ověření parametru.Pokud provádění může pokračovat, vrátí funkce hodnotu -1 a nastaví errno na EINVAL.
Další informace o tomto a dalších chybových kódech naleznete v tématu errno, _doserrno, _sys_errlist, and _sys_nerr.
Poznámky
Funkce sscanf_s načte data z buffer do umístění, které je dáno každým argument.Argumenty za formátem řetězce určují odkazy na proměnné, které mají typ, který odpovídá specifikátoru typů ve format.Na rozdíl od méně bezpečné verze sscanf, parametr velikosti vyrovnávací paměti je vyžadován při použití znaků pro pole typu c, C, s, S nebo sad řízení řetězců, které jsou uzavřeny v [].Velikost vyrovnávací paměti ve znacích musí být dodána jako další parametr ihned po každého parametru mezipaměti, který to vyžaduje.Například při čtení do řetězce, je velikost vyrovnávací paměti pro tento řetězec předána takto:
wchar_t ws[10];
swscanf_s(in_str, L"%9s", ws, _countof(ws)); // buffer size is 10, width specification is 9
Vyrovnávací paměť obsahuje ukončující hodnotu null.Pole pro specifikaci šířky můžete použít k zajištění, že token, který je určen pro čtení, se vejde do vyrovnávací paměti.Pokud není použita žádná specifikace pole „Šířka“ a čtený token je příliš velký a nevejde se do vyrovnávací paměti, do vyrovnávací paměti nebudou zapsána žádná data.
V případě znaků může být jeden znak přečten takto:
wchar_t wc;
swscanf_s(in_str, L"%c", &wc, 1);
V tomto příkladu je načten jeden znak ze vstupního řetězce a potom je uložen do širokoznaké vyrovnávací paměti.Při čtení více znaků řetězce neukončeného znakem null, jsou pro určení šířky a velikosti vyrovnávací paměti používána celá čísla bez znaménka.
char c[4];
sscanf_s(input, "%4c", &c, _countof(c)); // not null terminated
Další informace naleznete v tématu scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l a Znaky pole typu scanf.
[!POZNÁMKA]
Velikost parametru je typu unsigned, nikoli size_t.
Ovládací prvky argumentu format interpretují vstupní pole a mají stejné formuláře a funkce jako argument format funkce scanf_s.Pokud ke kopírování dojde mezi řetězci, které se překrývají, chování není definováno.
swscanf_s je širokoznaká verze sscanf_s;. Argumenty pro swscanf_s jsou širokoznaké řetězce.sscanf_s nezpracovává vícebajtové znaky v šestnáctkové soustavě.swscanf_s nezpracovává šestnáctkové kódování Unicode s plnou šířkou nebo znaky "oblasti kompatibility".Jinak swscanf_s a sscanf_s se chovají stejně.
Verze těchto funkcí, které mají příponu _l, jsou stejné s tím rozdílem, že používají parametr předaného národního prostředí namísto aktuálního národního prostředí vlákna.
Rutinní mapování obecného textu
Rutina TCHAR.H |
_UNICODE & _MBCS není definováno |
_MBCS definováno |
_UNICODE definováno |
---|---|---|---|
_stscanf_s |
sscanf_s |
sscanf_s |
swscanf_s |
_stscanf_s_l |
_sscanf_s_l |
_sscanf_s_l |
_swscanf_s_l |
Požadavky
Rutina |
Požadované záhlaví |
---|---|
sscanf_s, _sscanf_s_l |
<stdio.h> |
swscanf_s, _swscanf_s_l |
<stdio.h> nebo <wchar.h> |
Další informace o kompatibilitě naleznete v tématu Kompatibilita.
Příklad
// crt_sscanf_s.c
// This program uses sscanf_s to read data items
// from a string named tokenstring, then displays them.
#include <stdio.h>
#include <stdlib.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 plus NULL terminator
sscanf_s( tokenstring, "%s", s, _countof(s) );
sscanf_s( tokenstring, "%c", &c, sizeof(char) );
sscanf_s( tokenstring, "%d", &i );
sscanf_s( tokenstring, "%f", &fp );
// Output the data read
printf_s( "String = %s\n", s );
printf_s( "Character = %c\n", c );
printf_s( "Integer: = %d\n", i );
printf_s( "Real: = %f\n", fp );
}
Ekvivalent v rozhraní .NET Framework
Viz také metody Parse, jako například System::Double::Parse.
Viz také
Referenční dokumentace
fscanf, _fscanf_l, fwscanf, _fwscanf_l
scanf, _scanf_l, wscanf, _wscanf_l