将stdout写入字符串变量

时间:2013-09-28 11:44:26

标签: c++ string stdout

我在Linux(Ubuntu 12.04)平台上用C ++编写了一个程序,它每秒都会将我所需的输出打印到stdout中。这意味着,在10秒后,我在标准输出中有100行(每秒标准输出2行报告)。

这是我应用的模拟格式,我无法更改任何变量或方法将输出写入变量而不是stdout。

我要将此输出保存到字符串变量而不是stdout中。 C ++语言怎么可能?

1 个答案:

答案 0 :(得分: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的输出缓冲区:

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()都包含字符串数据。