21xrx.com
2024-09-20 05:35:54 Friday
登录
文章检索 我的文章 写文章
C++中如何将system命令的结果保存到字符串中
2023-06-30 09:51:07 深夜i     --     --
C++ System命令 结果保存 字符串

在C++编程中,有时候我们需要使用system命令来执行一些外部的程序或者命令。比如,我们需要运行一个shell脚本或者执行一个命令,然后将执行的结果保存到程序中用于后续的处理。

然而,system命令默认情况下是将执行结果输出到终端上的,而不是保存到程序中的变量中。那么,如何将system命令的结果保存到字符串中呢?下面我们来看一下具体的方法。

方法一:使用popen函数

popen函数是一个比较常用的方法,可以将一个外部命令的输出结果读取到一个C标准文件流中,进而保存到一个字符串中。

下面是一个示例代码:


#include <stdio.h>

#include <stdlib.h>

int main()

{

  FILE *fp;

  char result[1024];

  /* 执行一个命令并将输出读取到result中 */

  fp = popen("ls -l", "r");

  fgets(result, sizeof(result), fp);

  printf("Output: %s\n", result);

  pclose(fp);

  return 0;

}

在上面的代码中,我们使用popen函数执行了一个“ls -l”的命令,并将输出结果读取到result中。可以看到,我们在fgets函数中指定了最大读取的字节数,这样可以避免读取过多的内容导致缓冲区溢出。最后,我们使用pclose函数关闭文件指针。

方法二:使用stringstream类

stringstream类是一个比较便捷的方法,可以将一个字符串流(一系列字符串)写入到字符串中。

下面是一个示例代码:


#include <iostream>

#include <sstream>

#include <cstdlib>

int main()

{

  std::stringstream ss;

  std::string result;

  /* 执行一个命令并将输出写入ss中 */

  std::system("ls -l | head -n 2 | tail -n 1"); // 只输出第二行

  std::getline(ss, result);

  std::cout << "Output: " << result << std::endl;

  return 0;

}

在上面的代码中,我们使用了stringstream类的方法,将执行命令的输出结果写入到了一个字符串中。需要注意的是,我们使用了管道符“|”来对命令进行了处理,只输出了第二行结果。

至此,我们介绍了两种将system命令的输出结果保存到字符串中的方法。需要根据实际情况选择合适的方法。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复