C 为什么`fgets()`需要*str,而`getline()`需要**str参数?

C 为什么`fgets()`需要*str,而`getline()`需要**str参数?,c,arrays,string,pointers,io,C,Arrays,String,Pointers,Io,他们两个都能从小溪里钓到一条线 定义如下: ssize_t getline(char ** restrict linep, size_t * restrict linecapp, FILE * restrict stream); 及 为什么getline需要指向字符的指针,而不是像fgets那样使用指向字符的指针 下面的两个表达式相等吗 (一) (二) 如果传入一个指向NULL的指针,getline()可以分配自己的内存(以后必须释放内存)。必须向FGET传递现有缓冲区 getline需要

他们两个都能从小溪里钓到一条线

定义如下:

 ssize_t
 getline(char ** restrict linep, size_t * restrict linecapp, FILE * restrict stream);

为什么
getline
需要
指向字符的指针,而不是像
fgets
那样使用
指向字符的指针

下面的两个表达式相等吗

(一)

(二)

如果传入一个指向NULL的指针,getline()可以分配自己的内存(以后必须释放内存)。必须向FGET传递现有缓冲区

getline需要额外的间接寻址,以便修改指向已分配内存的指针。

getline()可以在将指针传递到NULL时分配自己的内存(稍后必须释放该内存)。必须向FGET传递现有缓冲区

getline需要额外的间接寻址,以便它可以修改指向已分配内存的指针。

因为如果您将指向
char*
的指针传递给它,它将为您分配一个缓冲区,而
null

至于你的第二个问题:否。
fgets
示例可能会导致SEGV。期望缓冲区实际存在。

因为如果您向缓冲区传递一个指向
char*
的指针,该指针为
null
,它将为您分配一个缓冲区

至于你的第二个问题:否。
fgets
示例可能会导致SEGV。期望缓冲区实际存在

 char *
 fgets(char * restrict str, int size, FILE * restrict stream);
char *str = NULL
read = getline (&str, &len, fp);
char *str = NULL
read = fgets (str, &len, fp);