将标准输出写入字符串变量 我在Linux(ubuntu 12.04)平台上编写了一个C++程序,它将我所需要的输出每秒打印到STDUT中。这意味着,10秒后,我在标准输出中有100行(每秒中的每个标准输出是2行报告)
这是我应用的模拟格式,我不能更改任何变量或方法来将输出写入变量而不是标准输出将标准输出写入字符串变量 我在Linux(ubuntu 12.04)平台上编写了一个C++程序,它将我所需要的输出每秒打印到STDUT中。这意味着,10秒后,我在标准输出中有100行(每秒中的每个标准输出是2行报告),c++,string,stdout,C++,String,Stdout,这是我应用的模拟格式,我不能更改任何变量或方法来将输出写入变量而不是标准输出 我将把这个输出保存到字符串变量中,而不是stdout。C++语言如何可能?,可以使用字符串流。假设您的原始日志函数如下所示: void log(std::ostream & o, std::string msg) { o << msg << std::endl; } int main() { // ... log(std::cout, "Ping"); } 在
我将把这个输出保存到字符串变量中,而不是stdout。C++语言如何可能?,可以使用字符串流。假设您的原始日志函数如下所示:
void log(std::ostream & o, std::string msg)
{
o << msg << std::endl;
}
int main()
{
// ...
log(std::cout, "Ping");
}
在任何一种情况下,
oss.str()
都包含字符串数据。如何使用默认程序对stdout打印进行标记,并允许在stdout中以我的格式打印我自己的字符串变量(oss.str())。@blubit:对不起,我不理解您的问题。你想格式化什么?我的意思是,我不想打印程序中的默认标准输出。只需将标准输出复制到字符串变量中。我怎样才能给打印标贴上标签?清楚了吗,朋友?:-)@BlueBit:changingrdbuf
的最后一部分应该可以实现这一点。试一试,看看我在上面的“重复”评论中链接的答案。“Ping”是什么意思?我应该用std::cout替换“Ping”?因为你提到:log(oss,“Ping”);它只发送“Ping”到stdout。是吗?当你说“stdout”时,你的意思是你的tseprintf()
还是fprintf(stdout…)
?在这种情况下,我认为没有解决办法。如果你的意思是std::cout,那么有一个解决方案。
#include <sstream>
int main()
{
std::ostringstream oss;
// ...
log(oss, "Ping");
}
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