std::strerror
Определено в заголовочном файле <cstring> | ||
|---|---|---|
char* strerror( int errnum ); |
Возвращает указатель на текстовое описание системного кода ошибки errnum, идентичное описанию, которое было бы выведено функцией std::perror().
errnum обычно получают из переменной errno, однако функция принимает любое значение типа int. Содержимое строки зависит от локали.
Программа не должна изменять возвращённую строку, однако она может быть перезаписана при последующем вызове функции strerror. Для strerror не требуется быть потокобезопасной. Реализации могут возвращать разные указатели на статические литералы строк, доступные только для чтения, либо каждый раз возвращать один и тот же указатель на статический буфер, в который strerror помещает строку.
Параметры
| errnum | - | целочисленное значение, соответствующее коду ошибки |
Возвращаемое значение
Указатель на завершающуюся нулём строку байтов, соответствующую коду ошибки errno errnum.
Примечания
POSIX допускает, что последующие вызовы strerror могут сделать недействительным значение указателя, возвращённое предыдущим вызовом. Также в POSIX указано, что содержимое этих сообщений определяется фасетом локали 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 (макроконстанта) |
|
Документация по C для strerror |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/string/byte/strerror