strerror_s
, , _strerror_s
, , _wcserror_s
__wcserror_s
Pobierz komunikat o błędzie systemu (strerror_s
, _wcserror_s
) lub wyświetl komunikat o błędzie dostarczony przez użytkownika (_strerror_s
, __wcserror_s
). Te funkcje to wersje programu strerror
, _strerror
, __wcserror
_wcserror
z ulepszeniami zabezpieczeń zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT.
Składnia
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
Bufor do przechowywania ciągu błędu.
sizeInBytes
Liczba bajtów w buforze.
sizeInWords
Liczba wyrazów w buforze.
errnum
Numer błędu.
strErrMsg
Komunikat dostarczony przez użytkownika.
Wartość zwracana
Zero, jeśli działanie powiedzie się, kod błędu w przypadku niepowodzenia.
Warunki błędu
buffer |
sizeInBytes /sizeInWords |
strErrMsg |
Zawartość buffer |
---|---|---|---|
NULL |
dowolny | dowolny | nie dotyczy |
dowolny | 0 | dowolny | niezmodyfikowane |
Uwagi
Funkcja strerror_s
jest bezpieczna wątkowo.
Funkcja strerror_s
mapuje errnum
ciąg komunikatu o błędzie, zwracając ciąg w pliku buffer
. _strerror_s
nie bierze numeru błędu; używa bieżącej wartości , errno
aby określić odpowiedni komunikat. Komunikat nie jest drukowany ani wyświetlany przez strerror_s
program lub _strerror_s
. Aby wyświetlić komunikat, należy wywołać funkcję wyjściową, taką jak fprintf
:
if (( _access( "datafile",2 )) == -1 )
{
_strerror_s(buffer, 80, NULL);
fprintf( stderr, buffer );
}
Jeśli strErrMsg
parametr to NULL
, _strerror_s
zwraca ciąg, buffer
który zawiera komunikat o błędzie systemu dla ostatniego wywołania biblioteki, które wygenerowało błąd. Jeśli strErrMsg
wartość nie jest równa NULL
, zwraca _strerror_s
ciąg w buffer
pliku zawierający (w kolejności) komunikat ciągu, dwukropek, spację, komunikat o błędzie systemu dla ostatniego wywołania biblioteki, które wygenerowało błąd. Komunikat ciągu może mieć długość co najwyżej 94 znaków.
Te funkcje obcinają komunikat o błędzie, jeśli jego długość przekracza rozmiar buforu — 1. Wynikowy ciąg w buffer
pliku jest zawsze zakończony wartością null.
Rzeczywisty numer błędu dla _strerror_s
elementu jest przechowywany w zmiennej errno
. Komunikaty o błędach systemu są dostępne za pośrednictwem zmiennej _sys_errlist
, która jest tablicą komunikatów uporządkowanych według numeru błędu. _strerror_s
uzyskuje dostęp do odpowiedniego komunikatu o błędzie przy użyciu errno
wartości jako indeksu do zmiennej _sys_errlist
. Wartość zmiennej _sys_nerr
jest definiowana jako maksymalna liczba elementów w tablicy _sys_errlist
. Aby uzyskać dokładne wyniki, wywołaj metodę _strerror_s
natychmiast po powrocie procedury biblioteki z powodu błędu. W przeciwnym razie kolejne wywołania metody strerror_s
lub _strerror_s
mogą zastąpić errno
wartość.
_wcserror_s
i __wcserror_s
są odpowiednio wersjami strerror_s
znaków i _strerror_s
.
Te funkcje weryfikują swoje parametry. Jeśli bufor ma NULL
wartość lub jeśli parametr rozmiaru wynosi 0, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametru . Jeśli wykonywanie jest dozwolone do kontynuowania, funkcje zwracają EINVAL
i ustawiają wartość EINVAL
errno
.
_strerror_s
, _wcserror_s
i __wcserror_s
nie są częścią definicji ANSI, ale są rozszerzeniami firmy Microsoft. Nie używaj ich tam, gdzie jest wymagana przenośność; w celu zachowania zgodności ze standardem ANSI użyj strerror_s
zamiast tego.
W języku C++używanie tych funkcji jest uproszczone przez przeciążenia szablonu; przeciążenia mogą automatycznie wnioskować długość buforu, eliminując konieczność określenia argumentu rozmiaru. Aby uzyskać więcej informacji, zobacz Bezpieczne przeciążenia szablonów.
Wersje biblioteki debugowania tych funkcji najpierw wypełniają bufor 0xFE. Aby wyłączyć to zachowanie, użyj polecenia _CrtSetDebugFillThreshold
.
Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.
Mapowania procedur tekstu ogólnego
Procedura TCHAR.H | _UNICODE i _MBCS niezdefiniowane |
_MBCS zdefiniowany |
_UNICODE zdefiniowany |
---|---|---|---|
_tcserror_s |
strerror_s |
strerror_s |
_wcserror_s |
Wymagania
Procedura | Wymagany nagłówek |
---|---|
strerror_s , _strerror_s |
<string.h> |
_wcserror_s , __wcserror_s |
<string.h> lub <wchar.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Przykład
Zobacz przykład dla elementu perror
.