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


strerror_s, , _strerror_s_wcserror_s__wcserror_s

Получают системное сообщение об ошибке (strerror_s, _wcserror_s) или выводят указанное пользователем сообщение об ошибке (_strerror_s, __wcserror_s). Эти функции — это версии strerror, _wcserror_strerrorс улучшениями безопасности, __wcserror как описано в функциях безопасности в CRT.

Синтаксис

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

Параметры

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

sizeInBytes
Количество байтов в буфере.

sizeInWords
Количество слов в буфере.

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

strErrMsg
Пользовательское сообщение.

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

Возвращает нуль в случае успеха или код ошибки в случае неудачи.

Условия ошибок

buffer sizeInBytes/sizeInWords strErrMsg Содержимое buffer
NULL любое любое Н/Д
любое 0 любое не изменено

Замечания

Функция strerror_s является потокобезопасной.

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

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

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

Эти функции усечь сообщение об ошибке, если его длина превышает размер буфера – 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. Дополнительные сведения см. в разделе "Безопасные перегрузки шаблонов".

Версии библиотек отладки этих функций сначала заполняют буфер 0xFE. Чтобы отключить это поведение, используйте _CrtSetDebugFillThreshold.

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.

Сопоставления подпрограмм универсального текста

Подпрограмма 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.

См. также

Обработка строк
clearerr
ferror
perror, _wperror