2013-09-28 5 views
0

Я написал программу на платформе C++ в Linux (Ubuntu 12.04), которая печатает мой требуемый вывод в stdout каждую секунду. Это означает, что через 10 секунд у меня есть 100 строк (каждый stdout в каждой секунде - отчет из двух строк) в stdout.Запись stdout в строковую переменную

Это мой прикладной формат симуляции, и я не могу изменить любую переменную или метод для записи вывода в переменную вместо stdout.

Я собираюсь сохранить этот вывод в строковой переменной вместо stdout. Как это возможно на языке C++?

+0

Когда вы говорите «stdout», вы имеете в виду вы tse 'printf()' или 'fprintf (stdout, ...)'? В этом случае я не думаю, что есть решение. Если вы имеете в виду 'std :: cout', то есть решение. –

ответ

1

Вы можете использовать поток строк для этого. Предположим, что исходная функция регистрации, как это:

void log(std::ostream & o, std::string msg) 
{ 
    o << msg << std::endl; 
} 

int main() 
{ 
    // ... 
    log(std::cout, "Ping"); 
} 

Изменить это:

#include <sstream> 

int main() 
{ 
    std::ostringstream oss; 

    // ... 
    log(oss, "Ping"); 
} 

Если это не вариант, вы можете искажать глобальный выходной буфер std::cout «s:

std::streambuf * sbuf = std::cout.rdbuf(); // save original 

std::ostringstream oss; 
std::cout.rdbuf(oss.rdbuf());    // redirect to "oss" 

// ... 

std::cout.rdbuf(sbuf);      // restore original 

В любом случае oss.str() содержит строковые данные.

+0

Как я могу записать стандартную программу по умолчанию и разрешить печатать мою собственную строковую переменную (oss.str()) с моим форматом в stdout? – BlueBit

+0

@BlueBit: Извините, я не понимаю ваш вопрос. Что вы хотите отформатировать? –

+0

Я имею в виду, я не хочу, чтобы мой стандартный stdout в моей программе был напечатан. Просто скопируйте stdout в строковую переменную. Как я могу записать стандартный вывод stdout? Это понятно, друг? :-) – BlueBit

Смежные вопросы