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);