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
    用户提供的消息

返回值

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

错误情况

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++ 中,使用这些功能由模板超载简化;超载可能自动推断缓冲区长度,而无需指定范围参数。 有关详细信息,请参阅安全模板重载

这些函数的调试版本首先用 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>

有关其他兼容性信息,请参见“简介”中的兼容性

示例

请参见中将字符串转换成浮点数示例。

.NET Framework 等效项

System::Exception::Message

请参见

参考

字符串操作 (CRT)

clearerr

ferror

perror、_wperror