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

时间:2017-10-24 05:14:26

标签: c function pointers memory-management pointer-to-pointer

我有以下代码:

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

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

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

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

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

    return buffer;
  }
}

我希望函数填写" line",这样当我返回时,我会在" line"中得到temp的值。目前,在调试时我看到line在line = temp指令后得到了正确的值。我希望在返回后保留这一点。

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

2 个答案:

答案 0 :(得分:2)

  

我想我需要将指针传递给指针

是的,您需要一个双指针,以便在函数终止后指针的值(指针指向的位置)仍然存在。

如果你不这样做,你将会有内存泄漏,因为分配给line的内存不会被引用。

答案 1 :(得分:2)

你已经给出了更好的答案。只有一个挑剔:

  

目前,在调试时我看到line在line = temp指令后得到了正确的值。我希望在返回后保留这一点。

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

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