strerror_s, _strerror_s, _wcserror_s, __wcserror_s

システム エラー メッセージ (strerror_s_wcserror_s) を取得します。または、ユーザーが指定したエラー メッセージ (_strerror_s__wcserror_s) を出力します。 これらの関数は、CRTstrerrorセキュリティ機能に関する説明に従ってセキュリティが強化されたバージョンの ,__wcserror_strerror_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 any 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 );
}

if strErrMsgNULL_strerror_s エラーを生成した最後の buffer ライブラリ呼び出しのシステム エラー メッセージを含む文字列を返します。 等しくないNULL場合strErrMsgは、文字列bufferメッセージ、_strerror_sコロン、スペース、エラーを生成した最後のライブラリ呼び出しのシステム エラー メッセージを含む文字列を (順番に) 返します。 文字列のメッセージの長さは、最大で 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 のワイド文字バージョンです。

これらの関数では、パラメーターの検証が行われます。 バッファーが 0 の場合、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