21xrx.com
2025-04-17 23:16:08 Thursday
文章检索 我的文章 写文章
C++中如何将system命令的结果保存到字符串中
2023-06-30 09:51:07 深夜i     34     0
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命令的输出结果保存到字符串中的方法。需要根据实际情况选择合适的方法。

  
  

评论区

    相似文章