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
    缓冲区的大小。

  • errnum
    错误号。

  • strErrMsg
    用户提供的消息。

返回值

零,如果成功,则失败的错误代码。

错误 Condtions

buffer

numberOfElements

strErrMsg

buffer内容

NULL

任何

任何

任何

0

任何

不修改

备注

strerror_s 函数映射 errnum 到错误消息字符串,因此返回指向该字符串。 _strerror_s 不采用错误号;它使用 errno 的当前值确定相应的消息。 strerror_s 和 _strerror_s 实际上不打印消息:为此,您需要调用一种输出功能 (如 fprintf:

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

如果 strErrMsg 是 NULL, _strerror_s 返回指向包含最后一个库的字符串系统错误信息调用该生成错误。 错误消息字符串由换行符 (“\ n) 终止。 如果 strErrMsg 与 NULL不相等,则 _strerror_s 返回指向包含 (按顺序) 字符串消息,冒号,空格的字符串,最后一个库的系统错误信息调用将产生错误和换行符。 字符串消息可以是,至多, 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 定义的部分,而是 Microsoft 对它。 不要使用它们可移植性需位置;对于 ANSI 兼容性,请使用strerror_s。

在 C++ 中,使用这些功能由模板重载简化;重载可以自动推断缓冲区长度,而无需指定范围参数。 有关更多信息,请参见 安全模板重载

这些函数的 " debug " 版本用 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 等效项

系统:: 异常:: 消息

请参见

参考

字符串操作(crt)

clearerr

ferror

perror, _wperror