2013-03-14 152 views
0

我有用C++编写的控制台应用程序。有没有什么办法可以将它的所有输出stdout收集到字符串/管道/内存数组?使用C++从控制台应用程序收集stdout输出

PS。我需要从控制台应用程序中执行此操作,我需要从中收集stdout。或者换句话说,它是从自己收集的。

+0

你到目前为止做了什么? – 2013-03-14 20:32:51

+0

这没有意义。如果它来自应用程序本身,则已经有输出,请将它发送到其他地方。要回答实际问题,是的,这是可能的。有一个只记录标准输出的应用程序是有道理的,但我没有得到你要去的地方。 – evanmcdonnal 2013-03-14 20:33:41

+0

如果文件输出没问题,你可以使用'freopen()'来做到这一点。看到http://stackoverflow.com/questions/5257509/freopen-equivalent-for-c-streams – jxh 2013-03-14 20:41:41

回答

3

是的。若要将其重定向到一个string,你可以使用一个std::stringstream

std::stringstream buffer; 
std::streambuf * old = std::cout.rdbuf(buffer.rdbuf()); 

然后,如果你这样做:

std::cout << "Example output" << std::endl; 
std::string text = buffer.str(); 

你会看到text现在包含"Example output\n"

+0

我的输出大部分来自C调用'_tprintf(_T(“Some line1 \ n”));'那doesn似乎没有被你的方法所抓住。任何想法为什么? – ahmd0 2013-03-14 21:09:48