Udostępnij za pośrednictwem


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ść EINVALerrno .

_strerror_s, _wcserror_si __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.

Zobacz też

Manipulowanie ciągami
clearerr
ferror
perror, _wperror