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