C言語 - テキストファイルを読み取る
C言語 - テキストファイルを読み取る
C言語でのテキストファイル読み取りを試してみたい。
開いて閉じる
まずはファイルを開いて何もせずに閉じてみる。
ファイルは fopen
関数でオープンして、fclose
関数でクローズする。
FILE *fp = fopen("path/to/file.txt", "r");
if ( fp == (FILE *)NULL ) {
perror("fopen error");
return 1;
}
fclose(fp);
fopen
関数はファイルオープンに失敗すると NULL ポインターを返す。
fclose
関数はファイルクローズに失敗すると 0 以外を返す。
1行ずつ読み取る
次はファイルの内容を1行ずつ読み取ってみる。
fgets
関数で改行コード('\n'
)まで読み取りができる。
改行コード自体も読み取り結果に格納される。
fgets
関数はファイルの終端に到達するか、読み取りエラーが起きた場合に NULL ポインターを返す。
なので NULL ポインターが返されるまでループすることで、ファイルの最初から最後までを読み取れる。
char buf[512];
while ( fgets(buf, sizeof(buf), fp) != NULL ) {
/* 読み取った内容をそのまま出力 */
printf("%s", buf);
}
NULL ポインターが返された理由を調べるには feof
関数または ferror
関数を使う。
char buf[512];
while ( fgets(buf, sizeof(buf), fp) != NULL ) {
/* 読み取った内容をそのまま出力 */
printf("%s", buf);
}
/* ファイルの終端に達した場合 */
if ( feof(fp) ) {
/* ~~~ 何らかの処理 ~~~ */
}
/* 読み取りエラーの場合 */
if ( ferror(fp) ) {
/* ~~~ 何らかのエラー処理 ~~~ */
}
改行コードを検出する前に指定したバッファが満たされてしまった場合、fgets
関数は正常終了となる。
よって、バッファの末尾が必ず改行コードになるわけではないので注意すること。
次のテキストファイルを読み取る場合、バッファのサイズが 10 バイトより小さいと1回の fgets で読み取り切れない。
123456789〈LF〉
もしバッファサイズが 8 だった場合(char buf[8];
)……
1回目の fgets 関数で 1234567 と ‘\0’ が、2回目の fgets 関数で 89〈LF〉と ‘\0’ がバッファに入る。
アカウントを作成 して、もっと沢山の記事を読みませんか?
この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。
ことりと さんにチップを送りました
チップをありがとうございます。
メッセージは管理画面から確認できます。
酒とアクアリウムが最近の楽しみ。
このクリエイターの人気記事
最新記事
TOPVIEWの人気記事
おすすめの記事
この記事にコメントをしてみませんか?