web-dev-qa-db-ja.com

Cのファイルから行を読み取る方法

ファイルから1行ずつ読み取りたいのですが、うまくいきません。

これが私がやろうとしたことです:

FILE *file;
char *line = NULL;
int len = 0;
char read;
file=fopen(argv[1], "r");

if (file == NULL)
    return 1;

while ((read = getline(&line, len, file)) != -1) {
    printf("Retrieved line of length %s :\n", &read);
    printf("%s", line);
}

if (line)
    free(line);

return 0;

それが機能しない理由はありますか?

5
KaramJaber

正しく機能させるために、いくつかの変更があります。

正しいタイプの_int len_を_size_t len_に変更します。

getline()構文が正しくありません。そのはず:

_while ((read = getline(&line, &len, file)) != -1) {
_

また、printf行も変更して、charと文字列の解釈の代わりに返された数値を出力する必要があります。

_printf("Retrieved line of length %d:\n", read);
_
5
Leigh

getline()に対する2番目の引数は(非常に)間違っています。

_size_t *_である必要があり、intを渡します。この問題についてコンパイラの警告が表示されているはずです。

成功する:

_size_t len;
_

と通話中:

_getline(&line, &len, file)
_

また、戻り値はcharではなく_ssize_t_型です。

関数を使用するコードを書く前に、 getline() のマニュアルページを読んで、それを理解していることを確認する必要があります。

3
unwind

または、このコードを使用することもできます。ファイル全体を1行ずつ読み取り、それらの行を出力します。

char buf[1000];

ptr_file =fopen("input3.txt","r");
if (!ptr_file)
    return 1;

while (fgets(buf,1000, ptr_file)!=NULL)
    printf("%s",buf);
2
user3651854