0

他们俩都可以从流中得到一条线。

定义如下:

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

 char *
 fgets(char * restrict str, int size, FILE * restrict stream);

为什么getline需要a pointer to a pointer to char,而不是a pointer to char像什么一样使用fgets呢?

下面的两个表达式是否等价?</p>

(1)

char *str = NULL
read = getline (&str, &len, fp);

(2)

char *str = NULL
read = fgets (str, &len, fp);
4

2 回答 2

2

getline() 可以,如果你传入一个指向 NULL 的指针,分配它自己的内存(你以后必须这样做free)。fgets必须传递一个现有的缓冲区。

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

于 2012-11-20T01:22:31.867 回答
2

因为getline如果你将一个指向 a char*which is的指针传递给它,它将为你分配一个缓冲区null

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

于 2012-11-20T01:22:59.370 回答