Sdílet prostřednictvím


strerror_s, _strerror_s, _wcserror_s, __wcserror_s

Zobrazí se systémová chybová zpráva (strerror_s, _wcserror_s) nebo vytiskne uživatelsky zadanou chybovou zprávu (_strerror_s, __wcserror_s). Tyto funkce jsou verze strerror, _strerror, _wcserror__wcserrors vylepšeními zabezpečení, jak je popsáno v funkcích zabezpečení v CRT.

Syntaxe

errno_t strerror_s(
   char *buffer,
   size_t sizeInBytes,
   int errnum
);
errno_t _strerror_s(
   char *buffer,
   size_t sizeInBytes,
   const char *strErrMsg
);
errno_t _wcserror_s(
   wchar_t *buffer,
   size_t sizeInWords,
   int errnum
);
errno_t __wcserror_s(
   wchar_t *buffer,
   size_t sizeInWords,
   const wchar_t *strErrMsg
);
template <size_t size>
errno_t strerror_s(
   char (&buffer)[size],
   int errnum
); // C++ only
template <size_t size>
errno_t _strerror_s(
   char (&buffer)[size],
   const char *strErrMsg
); // C++ only
template <size_t size>
errno_t _wcserror_s(
   wchar_t (&buffer)[size],
   int errnum
); // C++ only
template <size_t size>
errno_t __wcserror_s(
   wchar_t (&buffer)[size],
   const wchar_t *strErrMsg
); // C++ only

Parametry

buffer
Vyrovnávací paměť pro uložení řetězce chyby.

sizeInBytes
Počet bajtů v vyrovnávací paměti.

sizeInWords
Počet slov ve vyrovnávací paměti.

errnum
Číslo chyby.

strErrMsg
Zpráva zadaná uživatelem

Vrácená hodnota

Nula v případě úspěchu, kód chyby při selhání.

Chybové podmínky

buffer sizeInBytes/sizeInWords strErrMsg Obsah buffer
NULL jakékoliv jakékoliv nelze použít
jakékoliv 0 jakékoliv neupraveno

Poznámky

Funkce strerror_s je bezpečná pro přístup z více vláken.

Funkce strerror_s se mapuje errnum na řetězec chybové zprávy, který vrací řetězec v buffer. _strerror_s nepřebírají číslo chyby; použije aktuální hodnotu errno k určení příslušné zprávy. Zpráva není vytištěna nebo zobrazena strerror_s nebo _strerror_s. Pokud chcete zprávu vypsat, musíte volat výstupní funkci, například fprintf:

if (( _access( "datafile",2 )) == -1 )
{
   _strerror_s(buffer, 80, NULL);
   fprintf( stderr, buffer );
}

Pokud strErrMsg je NULL, _strerror_s vrátí řetězec, buffer který obsahuje systémovou chybovou zprávu pro poslední volání knihovny, která vytvořila chybu. Pokud strErrMsg se nerovná NULL, _strerror_s vrátí řetězec, který buffer obsahuje (v pořadí) vaši řetězcovou zprávu, dvojtečku, mezeru, chybovou zprávu systému pro poslední volání knihovny, která vytvořila chybu. Řetězcová zpráva může mít maximálně 94 znaků.

Tyto funkce zkrátí chybovou zprávu, pokud její délka překročí velikost vyrovnávací paměti – 1. Výsledný řetězec buffer je vždy ukončen s hodnotou null.

Skutečné číslo chyby pro _strerror_s je uloženo v proměnné errno. Systémové chybové zprávy jsou přístupné prostřednictvím proměnné _sys_errlist, což je pole zpráv seřazených podle čísla chyby. _strerror_s přistupuje k příslušné chybové zprávě pomocí errno hodnoty jako index proměnné _sys_errlist. Hodnota proměnné _sys_nerr je definována jako maximální počet prvků v _sys_errlist poli. Pokud chcete získat přesné výsledky, zavolejte _strerror_s ihned po návratu rutiny knihovny s chybou. V opačném případě následná volání strerror_s nebo _strerror_s mohou přepsat errno hodnotu.

_wcserror_s a __wcserror_s jsou široce znakové verze strerror_s a _strerror_sv uvedeném pořadí.

Tyto funkce ověřují své parametry. Pokud je NULL vyrovnávací paměť nebo je-li parametr velikosti 0, je vyvolána neplatná obslužná rutina parametru, jak je popsáno v ověření parametru . Pokud je spuštění povoleno pokračovat, funkce se vrátí EINVAL a nastaví errno na EINVAL.

_strerror_s, _wcserror_sa __wcserror_s nejsou součástí definice ANSI, ale jsou to rozšíření Microsoftu. Nepoužívejte je tam, kde je požadovaná přenositelnost; pro kompatibilitu ANSI použijte strerror_s místo toho.

V jazyce C++ je použití těchto funkcí zjednodušeno přetíženími šablon; přetížení mohou odvodit délku vyrovnávací paměti automaticky, čímž eliminuje nutnost zadat argument velikosti. Další informace naleznete v tématu Přetížení šablon zabezpečení.

Verze knihovny ladění těchto funkcí nejprve vyplní vyrovnávací paměť 0xFE. Chcete-li toto chování zakázat, použijte _CrtSetDebugFillThreshold.

Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.

Mapování rutin obecného textu

Rutina TCHAR.H _UNICODE a _MBCS není definován _MBCS Definovány _UNICODE Definovány
_tcserror_s strerror_s strerror_s _wcserror_s

Požadavky

Rutina Požadovaný hlavičkový soubor
strerror_s, _strerror_s <string.h>
_wcserror_s, __wcserror_s <string.h> nebo <wchar.h>

Další informace o kompatibilitě najdete v tématu Kompatibilita.

Příklad

Podívejte se na příklad pro perror.

Viz také

Manipulace s řetězci
clearerr
ferror
perror, _wperror