获取系统错误信息(strerror_s
、 _wcserror_s
)或打印用户提供的错误消息(_strerror_s
、__wcserror_s
)。 这些函数的版本是 strerror
、_strerror
、_wcserror
、__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 |
any | 任意 | 不适用 |
any | 0 | any | 未修改 |
备注
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 定义的一部分,而是其 Microsoft 扩展。 请不要在需要可移植性的位置使用它们;若要获得 ANSI 兼容性,请改用 strerror_s
。
在 C++ 中,通过模板重载简化这些函数的使用;重载可以自动推导出缓冲区长度,不再需要指定大小参数。 有关详细信息,请参阅安全模板重载。
这些函数的调试库版本首先用 0xFE 填充缓冲区。 若要禁用此行为,请使用 _CrtSetDebugFillThreshold
。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
一般文本例程映射
TCHAR.H 例程 | _UNICODE 和 _MBCS 未定义 |
_MBCS 已定义 |
_UNICODE 已定义 |
---|---|---|---|
_tcserror_s |
strerror_s |
strerror_s |
_wcserror_s |
要求
例程 | 必需的标头 |
---|---|
%> | <string.h> |
%> | <string.h> 或 <wchar.h> |
有关兼容性的详细信息,请参阅 兼容性。
示例
请参阅 perror
的示例。