如何将系统输出的输出存储到string中

当我尝试以下:

system( "ifconfig -a | grep inet | " "sed 's/\\([ ]*[^ ]*\\)\\([ ]*[^ ]*\\).*$/\\1 \\2/' " " > address.txt" ) ; 

我正在获取文件中的输出。 我怎样才能把输出分配给一个variables。

编辑:在@Paul R的评论中推荐这样做的最好方法是使用_popen并从stdin读取命令输出。 该MSDN页面上有示例代码。

原始的力量:

一种选择是使用tmpnam_s创建一个临时文件,在那里写你的输出而不是硬编码文件名,然后从文件中读回std::string ,一旦你完成就删除临时文件。 基于MSDN示例代码:

 #include <stdio.h> #include <stdlib.h> #include <fstream> #include <sstream> int main( void ) { char name1[L_tmpnam_s]; errno_t err; err = tmpnam_s( name1, L_tmpnam_s ); if (err) { printf("Error occurred creating unique filename.\n"); exit(1); } stringstream command; command << "ifconfig -a | grep inet | " << "sed 's/\\([ ]*[^ ]*\\)\\([ ]*[^ ]*\\).*$/\\1 \\2/' " << " > " << (const char*)name1; system(command.str().c_str()); { ifstream resultFile((const char*)name1); string resultStr; resultFile >> resultStr; cout << resultStr; } ::remove(name1); } 

这个代码比我通常使用CRT要多,但你似乎有一个你想使用的方法,依赖于这个。