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
.