我有一个文件指针,它包含来自popen()的输入。我想把所有的输入都放到一个char*str中,但是我不知道该怎么做(C编程的新功能)。

void save_cmd(int fd) {
  char buf[100];
  char *str;
  FILE *ls;
  if (NULL == (ls = popen("ls", "r"))) {
    perror("popen");
    exit(EXIT_FAILURE);
  }

  while (fgets(buf, sizeof(buf), ls) != NULL) {
    //Don't know what to do here....
  }
  pclose(ls);
}

我想我必须在while循环中连接,但是如果我事先不知道总大小(我想将整个结果保存为char*str),这怎么可能呢。如果有人对如何做到这一点有什么建议,我将不胜感激。

最佳答案

所以在您的代码中,您已经捕获了buf中的一行。
现在,您希望*str变量中的所有内容都正确。
你需要为它分配内存,然后复制。下面是一个例子:

void save_cmd(int fd) {
  char buf[100];
  char *str = NULL;
  char *temp = NULL;
  unsigned int size = 1;  // start with size of 1 to make room for null terminator
  unsigned int strlength;

  FILE *ls;
  if (NULL == (ls = popen("ls", "r"))) {
    perror("popen");
    exit(EXIT_FAILURE);
  }

  while (fgets(buf, sizeof(buf), ls) != NULL) {
    strlength = strlen(buf);
    temp = realloc(str, size + strlength);  // allocate room for the buf that gets appended
    if (temp == NULL) {
      // allocation error
    } else {
      str = temp;
    }
    strcpy(str + size - 1, buf);     // append buffer to str
    size += strlength;
  }
  pclose(ls);
}

关于c - 将来自popen()的输入读入C中的char *,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26932616/

10-11 22:48