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参见示例。