0

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

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

我将把这个输出保存到字符串变量而不是标准输出中。C++语言怎么可能?

4

1 回答 1

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");
}

如果这不是一个选项,您可以破坏 globalstd::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()包含字符串数据。

于 2013-09-28T11:49:44.973 回答