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
__wcserror
s 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 | Není k dispozici |
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_s
v 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_s
a __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 definovaný |
_UNICODE definovaný |
---|---|---|---|
_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
.