Namespaces
Variants

std:: strerror

From cppreference.net
ヘッダで定義 <cstring>
char * strerror ( int errnum ) ;

システムエラーコード errnum のテキスト記述へのポインタを返します。これは std::perror() によって表示される説明と同一です。

errnum は通常 errno 変数から取得されますが、この関数は int 型の任意の値を受け入れます。文字列の内容はロケール固有です。

返される文字列はプログラムによって変更されてはならないが、後続の strerror 関数の呼び出しによって上書きされる可能性がある。 strerror はスレッドセーフである必要はない。実装によっては、静的読み取り専用文字列リテラルへの異なるポインタを返す場合もあれば、静的なバッファ内の同じポインタを繰り返し返す場合もある。このバッファには strerror が文字列を格納する。

目次

パラメータ

errnum - エラーコードを参照する整数値

戻り値

errno エラーコード errnum に対応する、null終端バイト文字列へのポインタ。

注記

POSIX は、後続の strerror 呼び出しによって、以前の呼び出しで返されたポインタ値を無効化することを許可しています。また、これらのメッセージの内容を制御するのは LC_MESSAGES ロケールファセットであることも規定しています。

POSIXにはスレッドセーフ版の strerror_r が定義されています。Glibcは 互換性のないバージョンを定義しています

#include <cerrno>
#include <clocale>
#include <cmath>
#include <cstring>
#include <iostream>
int main()
{
    const double not_a_number = std::log(-1.0);
    std::cout << not_a_number << '\n';
    if (errno == EDOM)
    {
        std::cout << "log(-1) failed: " << std::strerror(errno) << '\n';
        std::setlocale(LC_MESSAGES, "de_DE.utf8");
        std::cout << "Or, in German, " << std::strerror(errno) << '\n';
    }
}

出力例:

nan
log(-1) failed: Numerical argument out of domain
Or, in German, Das numerische Argument ist ausserhalb des Definitionsbereiches

関連項目

現在のエラーに対応する文字列を stderr に表示する
(関数)
標準POSIX互換エラー条件のマクロ
(マクロ定数)