😽
fgetsで複数行のファイルを読み取る
fgets()
でファイルの中身を読み取る。ただし複数行あっても読み取れるようにしたい。
fgets
関数は
- 第1引数
char *
: ファイルから読み取る文字列をstoreするcharacter pointer - 第2引数
int
: ファイルから読み取る文字列の最大の長さ - 第3引数
FILE *
: ファイルストリームのポインタ。stdin
でもよい。
fgets
関数の挙動として
- 改行
- EOF
に到達すると文字列のscanが停止する。このため、素朴にfgets
のみ利用すると、一行しか読み取られない。
これを考慮すると、while
ループを併用することになる。
そして、行ごとに読み取る時の注意点としては、fgetsの挙動として最終行に\n
が差し込まれるのでそれを主導で取り除いてやる必要がある。
これは、ファイルの最後の行以外で起こるということも考慮する。
コードは以下。
#include <stdio.h>
#include <string.h>
#define MAX_LINE_LENGTH 20
int main () {
FILE *fp;
char str[100];
fp = fopen("file.txt", "r");
if(fp == NULL){
perror("error opening file\n");
return 0;
}
int l = 0;
while (fgets(str, MAX_LINE_LENGTH, fp) != NULL) {
// need to check if the last character is \n and
if(*str && str[strlen(str) - 1] == '\n'){
str[strlen(str) - 1] = 0;
}
printf("%d: %s\n", l, str);
l++;
}
fclose(fp);
return 0;
}
読み取り対象のファイルを以下のようにする。
file.txt
の中身を以下のようだとする
hogehoge11
hogehoge22
hogehoge33
出力。
Discussion