std::strerror
| Определено в заголовочном файле <cstring>
|
||
char* strerror( int errnum ); |
||
Возвращает указатель на текстовое описание кода системной ошибки errnum, идентичное описанию, которое будет напечатано std::perror().
errnum обычно получается из переменной errno, однако функция принимает любое значение типа int. Содержимое строки зависит от локали.
Возвращённая строка не должна изменяться программой, но может быть перезаписана при последующем вызове функции strerror. strerror не обязательно должна быть потокобезопасной. Реализации могут возвращать разные указатели на статические строковые литералы, доступные только для чтения, или могут возвращать один и тот же указатель снова и снова, указывающий на статический буфер, в который strerror помещает строку.
Параметры
| errnum | — | целое значение, ссылающееся на код ошибки |
Возвращаемое значение
Указатель на строку байтов с нулевым завершающим символом, соответствующую коду ошибки errno в errnum.
Примечание
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): " << std::strerror(errno) << '\n';
std::setlocale(LC_MESSAGES, "de_DE.utf8");
std::cout << "Или, на Немецком, " << std::strerror(errno) << '\n';
}
}
Возможный вывод:
nan
Сбой log(-1): Numerical argument out of domain
Или, на Немецком, Das numerische Argument ist ausserhalb des Definitionsbereiches
Смотрите также
| выводит строку символов, соответствующую текущей ошибке, в stderr (функция) | |
| макросы для стандартных состояний ошибок, совместимых с POSIX (макроконстанта) | |
Документация C по strerror
| |