Почему перенаправление вывода утверждения() работает, когда оно выполняется с использованием freopen() и stderr, но не пC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Почему перенаправление вывода утверждения() работает, когда оно выполняется с использованием freopen() и stderr, но не п

Сообщение Гость »


Я хотел бы перенаправить вывод, который assert() создает в случае сбоя утверждения, чтобы он записывался в файл журнала, а не в окно вывода. Я предполагал, что assert() использует std::cerr для вывода, но при перенаправлении std::cerr в мой файл журнала assert( ) по-прежнему выводится в окно вывода, а не в мой файл:

std::ofstream ofs("log-file.txt"); std::cerr.rdbuf(ofs.rdbuf()); утверждать (ложь); // По-прежнему выводит «Утверждение не выполнено: false» в окно вывода, а не в файл журнала Я нашел вопрос SO с похожей проблемой, и в ответе на него было предложено вместо этого использовать freopen, вот так:

freopen("log-file.txt", "w", stderr); Это выдает ошибку: 'freopen': Эта функция или переменная могут быть небезопасными. Вместо этого рассмотрите возможность использования freopen_s.
Кажется,
freopen_s принимает другие аргументы, чем freopen, и я не могу заставить его работать.

В другом ответе SO предлагалось использовать freopen, но просто добавить _CRT_SECURE_NO_WARNINGS в командную строку в свойствах проекта Visual Studio. Это действительно устранило ошибку, и assert() теперь правильно выводится в мой файл журнала.

Но все это кажется излишне сложным. Такое ощущение, что должен быть плавный способ добиться того, чего я хочу, без подавления предупреждений компилятора уровня 3. Почему я не могу просто нормально перенаправить буфер того, что assert() использует для вывода? Что именно assert() использует для вывода, если это не std::cout, std::cerr или std::clog? (Я пробовал перенаправить все три)
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»