我需要一个指向指针的指针吗?
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
指向)。
我有以下代码:
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
指向)。