【问题标题】:Write stdout into a string variable [duplicate]将标准输出写入字符串变量[重复]
【发布时间】:2013-10-04 16:24:29
【问题描述】:

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

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

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

【问题讨论】:

  • 当您说“stdout”时,您是指printf() 还是fprintf(stdout, ...)?在那种情况下,我认为没有解决方案。如果你的意思是std::cout 有一个解决方案。

标签: c++ string stdout


【解决方案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() 都包含字符串数据。

【讨论】:

  • 我怎样才能通过默认程序绑定标准输出打印并允许在标准输出中使用我的格式打印我自己的字符串变量(oss.str())?
  • @BlueBit:对不起,我不明白你的问题。你想格式化什么?
  • 我的意思是,我不想打印程序中的默认标准输出。只需将标准输出复制到字符串变量中。如何绑定打印标准输出?清楚了吗,朋友? :-)
  • @BlueBit:更改rdbuf 的最后一部分应该可以做到这一点。试一试,另请参阅我在上面的“重复”评论中链接的答案。
  • “Ping”是什么意思?我应该用 std::cout 替换“Ping”吗?因为你提到:log(oss, "Ping");它只是将“Ping”发送到标准输出。是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2016-05-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 2011-03-29
  • 1970-01-01
相关资源
最近更新 更多