我在 Linux(Ubuntu 12.04)平台上用 C++ 编写了一个程序,每秒将我需要的输出打印到标准输出中。这意味着,10 秒后,我在标准输出中有 100 行(每秒每个标准输出是 2 行报告)。
这是我应用的模拟格式,我无法更改任何变量或方法来将输出写入变量而不是标准输出。
我将把这个输出保存到字符串变量而不是标准输出中。C++语言怎么可能?
您可以为此使用字符串流。假设你原来的日志功能是这样的:
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()
包含字符串数据。