strerror
、 _strerror
、 _wcserror
、 __wcserror
システム エラー メッセージの文字列 (strerror
、_wcserror
) を取得します。または、ユーザーが指定したエラー メッセージの文字列 (_strerror
、__wcserror
) を書式設定します。 これらの関数のセキュリティを強化したバージョンを使用できます。「strerror_s
、_strerror_s
、_wcserror_s
、__wcserror_s
」を参照してください。
構文
char * strerror(
int errnum );
char * _strerror(
const char *strErrMsg );
wchar_t * _wcserror(
int errnum );
wchar_t * __wcserror(
const wchar_t *strErrMsg );
パラメーター
errnum
エラー番号。
strErrMsg
ユーザーが指定したメッセージ。
戻り値
これらすべての関数によって、ランタイムが所有するスレッド ローカル ストレージ バッファー内のエラー メッセージ文字列へのポインターが返されます。 後で同じスレッドで呼び出すと、この文字列が上書きされる可能性があります。
解説
strerror
関数は、エラー メッセージの文字列に errnum
をマップし、その文字列へのポインターを返します。 strerror
関数と_strerror
関数は、実際にはメッセージを出力しません。 印刷するには、 fprintf
などの出力関数を呼び出します。
if (( _access( "datafile", 2 )) == -1 )
fprintf( stderr, _strerror(NULL) );
strErrMsg
がNULL
として渡された場合、_strerror
は文字列へのポインターを返します。 これには、エラーを生成した最後のライブラリの呼び出しに対するシステム エラー メッセージが含まれます。 __wcserror
を呼び出すと、エラー メッセージ文字列は改行文字 ('\n'
) で終了します。 他の関数は '\n'
を追加しません。 strErrMsg
がNULL
されていない場合、文字列には、strErrMsg
文字列、コロン、スペース、システム エラー メッセージが順番に含まれます。 文字列メッセージの長さは、最大 94 文字 (狭い (_strerror
) 文字またはワイド (__wcserror
) 文字のいずれかです。
_strerror
の実際のエラー番号は、変数errno
に格納されます。 正確な結果を生成するには、ライブラリ ルーチンからエラーが返された直後に _strerror
を呼び出します。 それ以外の場合、後でライブラリ ルーチンを呼び出しても、 errno
値が上書きされる可能性があります。
_wcserror
、および __wcserror
は、それぞれ、strerror
、および _strerror
のワイド文字バージョンです。
_strerror
、 _wcserror
、および __wcserror
は Microsoft 固有であり、Standard C ライブラリの一部ではありません。 移植可能なコードが必要な場合、これらを使用することはお勧めしません。 Standard C の互換性を確保するために、代わりに strerror
を使用してください。
エラー文字列を取得するには、非推奨のマクロの_sys_errlist
と_sys_nerr
、および非推奨の内部関数の__sys_errlist
と__sys_nerr
ではなく、strerror
または_wcserror
することをお勧めします。
既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。
汎用テキスト ルーチンのマップ
TCHAR.H のルーチン | _UNICODE と _MBCS が定義されていない |
_MBCS が定義されている |
_UNICODE が定義されている |
---|---|---|---|
_tcserror |
strerror |
strerror |
_wcserror |
要件
ルーチンによって返される値 | 必須ヘッダー |
---|---|
strerror |
<string.h> |
_strerror |
<string.h> |
_wcserror , __wcserror |
<string.h> |
互換性の詳細については、「 Compatibility」を参照してください。
例
perror
の例を参照してください。