Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将标准输出写入字符串变量 我在Linux(ubuntu 12.04)平台上编写了一个C++程序,它将我所需要的输出每秒打印到STDUT中。这意味着,10秒后,我在标准输出中有100行(每秒中的每个标准输出是2行报告)_C++_String_Stdout - Fatal编程技术网

将标准输出写入字符串变量 我在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:changing
rdbuf
的最后一部分应该可以实现这一点。试一试,看看我在上面的“重复”评论中链接的答案。“Ping”是什么意思?我应该用std::cout替换“Ping”?因为你提到:log(oss,“Ping”);它只发送“Ping”到stdout。是吗?当你说“stdout”时,你的意思是你的tse
printf()
还是
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