std:: strerror

From cppreference.com
Defined in header <cstring>
char * strerror ( int errnum ) ;

Returns a pointer to the textual description of the system error code errnum , identical to the description that would be printed by std::perror() .

errnum is usually acquired from the errno variable, however the function accepts any value of type int . The contents of the string are locale-specific.

The returned string must not be modified by the program, but may be overwritten by a subsequent call to the strerror function. strerror is not required to be thread-safe. Implementations may be returning different pointers to static read-only string literals or may be returning the same pointer over and over, pointing at a static buffer in which strerror places the string.

Parameters

errnum - integer value referring to an error code

Return value

Pointer to a null-terminated byte string corresponding to the errno error code errnum .

Notes

POSIX allows subsequent calls to strerror to invalidate the pointer value returned by an earlier call. It also specifies that it is the LC_MESSAGES locale facet that controls the contents of these messages.

POSIX has a thread-safe version called strerror_r defined. Glibc defines an incompatible version .

Example

#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';
    }
}

Possible output:

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

See also

displays a character string corresponding of the current error to stderr
(function)
macros for standard POSIX-compatible error conditions
(macro constant)
C documentation for strerror