strerror_s、_strerror_s、_wcserror_s、__wcserror_s
システム エラー メッセージ (strerror_s) を取得します _wcserror_sまたはユーザーが指定したエラー メッセージ (_strerror_s__wcserror_s) を出力します。これらの関数は、「CRT のセキュリティ機能」に説明されているように、strerror、_strerror、_wcserror、__wcserror のセキュリティが強化されたバージョンです。
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
ユーザーが指定したメッセージ。
戻り値
正常終了した場合は 0 を返します。失敗した場合はエラー コードを返します。
エラー 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 は可変 _sys_errlist にインデックスとして errno の値を使用して適切なエラー メッセージにアクセスします。_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++ では、テンプレートのオーバーロードによってこれらの関数を簡単に使用できます。オーバーロードでは、バッファー長を自動的に推論できるため、サイズ引数を指定する必要がなくなります。詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。
これらの関数のデバッグ バージョンは、最初にバッファーを 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> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
perror の例を参照してください。