strerror_s
、 _strerror_s
、 _wcserror_s
、 __wcserror_s
システム エラー メッセージ (strerror_s
、_wcserror_s
) を取得します。または、ユーザーが指定したエラー メッセージ (_strerror_s
、__wcserror_s
) を出力します。 これらの関数は、「CRT のSecurity 機能」で説明されているように、セキュリティが強化されたstrerror
、_strerror
、_wcserror
、__wcserror
のバージョンです。
構文
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
ユーザーが指定したメッセージ。
戻り値
正常終了した場合は 0 を返します。失敗した場合はエラー コードを返します。
エラー条件
buffer |
sizeInBytes /sizeInWords |
strErrMsg |
buffer の内容 |
---|---|---|---|
NULL |
任意 | 任意 | 該当なし |
任意 | 0 | 任意 | 変更されない |
解説
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
されている場合、または size パラメーターが 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 |
要件
ルーチンによって返される値 | 必須ヘッダー |
---|---|
strerror_s , _strerror_s |
<string.h> |
_wcserror_s , __wcserror_s |
<string.h> または <wchar.h> |
互換性の詳細については、「 Compatibility」を参照してください。
例
perror
の例を参照してください。