Поделиться через


strerror_s, _strerror_s, _wcserror_s, __wcserror_s

Получает сообщение о системной ошибке (strerror_s, _wcserror_s) или печатает указанное пользователем сообщение об ошибке (_strerror_s, __wcserror_s). Здесь представлены версии strerror, _strerror, _wcserror, __wcserror с усовершенствованной безопасностью, как описано в разделе Функции безопасности в CRT.

errno_t strerror_s(
   char *buffer,
   size_t numberOfElements,
   int errnum 
);
errno_t _strerror_s(
   char *buffer,
   size_t numberOfElements,
   const char *strErrMsg 
);
errno_t _wcserror_s(
   wchar_t *buffer,
   size_t numberOfElements,
   int errnum 
);
errno_t __wcserror_s(
   wchar_t *buffer,
   size_t numberOfElements,
   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

Параметры

  • buffer
    Буфер для хранения строки ошибок.

  • numberOfElements
    Размер buffer.

  • errnum
    Номер ошибки.

  • strErrMsg
    Предоставленное пользователем сообщение.

Возвращаемое значение

Нуль, если успешно; код ошибки при неудаче.

Условия возникновения ошибки

buffer

numberOfElements

strErrMsg

Содержимое buffer.

NULL

any

any

Н/Д

any

0

any

без изменений

Заметки

Функция strerror_s сопоставляет errnum в строку сообщения об ошибке, возвращая строку в buffer. _strerror_s не принимает номер ошибки; он использует текущее значение errno для определения соответствующего сообщения. Ни strerror_s, ни _strerror_s не печатает сообщения: Для этого необходимо вызвать функцию вывода, например fprintf.

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

Если strErrMsg равен NULL, _strerror_s возвращает строку в buffer, содержащий сообщение о системной ошибке для последнего вызова библиотеки, создавшего ошибку. Строка сообщения об ошибке заканчивается символом новой строки ('\n'). Если strErrMsg не равно NULL, то _strerror_s возвращает строку в buffer, содержащий (в таком порядке) строку сообщения, двоеточие, пробел, сообщение о системной ошибке для последнего вызова библиотеки, создавшего ошибку, и символ новой строки. Строка сообщения может быть длиной не более 94 символа.

Эти функции усекают сообщение об ошибке, если его длина превышает numberOfElements -1. Результирующая строка в buffer всегда завершается символом null.

Фактический номер ошибки для _strerror_s хранится в переменной errno. Доступ к сообщениям о системной ошибке осуществляется через переменную _sys_errlist, которая представляет собой массив сообщений об ошибке, отсортированный по номеру ошибки. _strerror_s получает доступ к соответствующему сообщению об ошибке, используя значение errno в качестве индекса для массива _sys_errlist. Значение переменной _sys_nerr определено как максимальное количество элементов в массиве _sys_errlist. Для предоставления точных результатов следует вызывать _strerror_s сразу после того, как библиотечная подпрограммы возвращается с ошибкой. В противном случае последующие вызовы strerror_s или _strerror_s могут перезаписать значение errno.

_wcserror_sи __wcserror_sверсии с расширенными символами функций strerror_sи _strerror_s соответственно.

Эти функции проверяют свои параметры. Если буфер равен NULL, или если параметр размера равен 0, то вызывается обработчик недопустимого параметра, как описано в разделе Проверка параметров. Если продолжение выполнения разрешено, эти функции возвращают EINVAL и устанавливают для errno значение EINVAL.

_strerror_s, _wcserror_s, и __wcserror_s не являются частью определения ANSI, а вместо этого они - расширения Майкрософт для него. Их не следует использовать там, где отдается предпочтение переносимости; для обеспечения совместимости с ANSI, используйте вместо них strerror_s .

В C++ использование этих функций упрощено шаблонными перегрузками; перегрузки могут определить длину буфера автоматически, устранена необходимость указывать аргумент size. Дополнительные сведения см. в разделе Безопасные перегрузки шаблонов.

Отладочные версии этих функций сначала заполняют буфер значением 0xFD. Для отключения данного поведения используйте _CrtSetDebugFillThreshold.

Универсальное текстовое сопоставление функций

Подпрограмма TCHAR.H

_UNICODE & _MBCS не определены

_MBCS определено

_UNICODE определено

_tcserror_s

strerror_s

strerror_s

_wcserror_s

Требования

Подпрограмма

Обязательный заголовок

strerror_s, _strerror_s

<string.h>

_wcserror_s, __wcserror_s

<string.h> или <wchar.h>

Дополнительные сведения о совместимости см. в разделе Совместимость во введении.

Пример

См. пример для perror.

Эквивалент в .NET Framework

System::Exception::Message

См. также

Ссылки

Управление строками (CRT)

clearerr

ferror

perror, _wperror