ファイルから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;
それが機能しない理由はありますか?
正しく機能させるために、いくつかの変更があります。
正しいタイプの_int len
_を_size_t len
_に変更します。
getline()
構文が正しくありません。そのはず:
_while ((read = getline(&line, &len, file)) != -1) {
_
また、printf
行も変更して、char
と文字列の解釈の代わりに返された数値を出力する必要があります。
_printf("Retrieved line of length %d:\n", read);
_
getline()
に対する2番目の引数は(非常に)間違っています。
_size_t *
_である必要があり、int
を渡します。この問題についてコンパイラの警告が表示されているはずです。
成功する:
_size_t len;
_
と通話中:
_getline(&line, &len, file)
_
また、戻り値はchar
ではなく_ssize_t
_型です。
関数を使用するコードを書く前に、 getline()
のマニュアルページを読んで、それを理解していることを確認する必要があります。
または、このコードを使用することもできます。ファイル全体を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);