次の方法で共有


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 );
}

strErrMsgNULL場合、_strerror_sは、エラーを生成した最後のライブラリ呼び出しのシステム エラー メッセージを含む文字列をbufferで返します。 strErrMsgNULLと等しくない場合、_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 を返し、errnoEINVAL に設定します。

_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 の例を参照してください。

関連項目

文字列操作
clearerr
ferror
perror, _wperror