Sdílet prostřednictvím


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

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

I/O proudu

fscanf, _fscanf_l, fwscanf, _fwscanf_l

scanf, _scanf_l, wscanf, _wscanf_l

sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l

_snprintf, _snprintf_l, _snwprintf, _snwprintf_l