我有以下代码:
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);
的指针,但我只是想掌握常规指针。解决此类问题的最佳方法是什么?我在正确的轨道上吗?
答案 0 :(得分:2)
我想我需要将指针传递给指针
是的,您需要一个双指针,以便在函数终止后指针的值(指针指向的位置)仍然存在。
如果你不这样做,你将会有内存泄漏,因为分配给line
的内存不会被引用。
答案 1 :(得分:2)
你已经给出了更好的答案。只有一个挑剔:
目前,在调试时我看到line在
line = temp
指令后得到了正确的值。我希望在返回后保留这一点。
不可能。 C函数调用按值传递参数,因此函数内部的line
是一个不同于外部的变量,一旦函数退出就不再存在。那是为什么你需要在这里传递指针指针。
您似乎缺少一些信息:指针与普通变量没有太大差别,它存储了一个值。唯一的区别是存储的值是某个其他变量的地址。当然,您可以像指向任何东西的指针一样处理指针指针,并且可以取消引用两次。在您的情况下,最简单的方法是只更改参数类型,然后将每个line
替换为*line
(将访问指针line
指向)。