我需要一个指向指针的指针吗?

Do I need a pointer to a pointer here?

我有以下代码:

char* get_line(char *buffer, char *line, char *partialLine) {

  int i = 0;
  while (buffer[i] != '\n' && buffer[i] != '[=10=]') i++;

  if (buffer[i] == '\n') {

    line = malloc(sizeof(char) * (i+2));
    memcpy(line,buffer,i+1);
    line[i+1] = '[=10=]';

    char *temp = append(partialLine,line);
    if (partialLine) {
      free(partialLine);
      partialLine = NULL;
    }
    free(line);
    line = temp;
    buffer = pop_buffer(buffer,i+1);

    return buffer;
  }
}

我想让函数填入"line",这样当我return时,我在"line"中就有了temp的值。目前,在调试时我看到 line 在 line = temp 指令之后获得了正确的值。我希望在 return.

之后保留它

我想我需要传递一个指向指针的指针来制作函数原型 char* get_line(char *buf, char **line, char *partialLine);,但我只是刚刚开始掌握常规指针。解决此类问题的最佳方法是什么?我在正确的轨道上吗?

I think I need to pass a pointer to a pointer

是的,你需要一个双指针,这样指针的值(指针指向的地方)在函数终止后仍然存在。

如果不这样做,将会发生内存泄漏,因为分配给 line 的内存将不可引用。

您已经给出了大部分答案。只是一个挑剔:

At the moment, when debugging I see line gets the right value after the line = temp instruction. I want this to be kept after the return.

那是不可能的。 C 函数调用通过值 传递参数,因此函数内部的line 是与外部不同的变量,一旦函数退出就不再存在。这就是为什么你需要在这里传递一个指向指针的指针。

您似乎遗漏了一点信息:指针与普通变量没有太大区别,它存储一个值。唯一的区别是存储的值是其他变量的地址。当然,您可以像处理指向任何对象的指针一样处理指向指针的指针,并且可以解引用两次。在您的情况下,最简单的方法是仅更改参数类型,然后将每个 line 替换为 *line(这将访问指针 line 指向)。