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 chara pointer to charfgets

また、以下の 2 つの式は同じですか?</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へのポインターを渡すと、バッファーが割り当てられるためchar*ですnull

2 番目の質問について: いいえ。このfgets例では、SEGV が発生する可能性があります。fgetsバッファが実際に存在することを期待します。

于 2012-11-20T01:22:59.370 に答える