第27回 ファイル入出力
C言語のファイル操作。fopen, fprintf, fscanf, fcloseの使い方を解説。
ファイル操作の流れ
プログラムの実行結果は通常、終了すると消えてしまいます。ファイルに保存すれば、データを永続化できます。
ファイル操作は3ステップ:① 開く(fopen) → ② 読み書き(fprintf/fscanf) → ③ 閉じる(fclose)
→
✏️
② 読み書き
fprintf / fscanf
→
FILE *fp = fopen("data.txt", "w"); // "w"=書き込み
if(fp == NULL){
printf("ファイルを開けませんでした\n");
return 1;
}
fprintf(fp, "Hello File!\n"); // ファイルに出力
fclose(fp); // 必ず閉じる
⚠️ fopen の戻り値は必ず NULL チェック! ファイルが開けなかった場合(パスが間違い、権限不足)に NULL が返ります。チェックしないとプログラムがクラッシュします。
ファイルへの書き込み (fprintf)
fprintf は printf とほぼ同じですが、第1引数にファイルポインタを指定します。
FILE *fp = fopen("scores.txt", "w");
int scores[3] = {85, 92, 78};
for(int i = 0; i < 3; i++){
fprintf(fp, "Student%d: %d\n", i+1, scores[i]);
}
fclose(fp);
モード "w" (write)
新規作成 or 上書き。既存の内容は消える。
モード "a" (append)
追記モード。既存データの末尾に追加される。
モード "r" (read)
読み取り専用。ファイルが無いと NULL が返る。
ファイルからの読み込み (fscanf)
fscanf は scanf のファイル版。戻り値で読み取り成功・失敗を判定します。
FILE *fp = fopen("numbers.txt", "r");
if(fp == NULL) return 1;
int val;
while(fscanf(fp, "%d", &val) == 1){
printf("読み取り: %d\n", val);
}
fclose(fp);
fscanf の戻り値は「正常に読み取れた項目数」。ファイル末尾に達すると EOF を返すので、while(fscanf(...) == 1) で全データを読み切れます。
1行ずつ読む (fgets)
fgets は1行まるごと文字列として読み取ります。空白を含む行も安全に処理できるため、実務では fscanf より使われることが多いです。
FILE *fp = fopen("memo.txt", "r");
if(fp == NULL) return 1;
char buf[256];
int lineNo = 1;
while(fgets(buf, sizeof(buf), fp) != NULL){
printf("%d: %s", lineNo, buf);
lineNo++;
}
fclose(fp);
fgets の安全性:sizeof(buf) でバッファサイズを指定するため、バッファオーバーフローを防げます。scanf("%s") より安全な入力方法です。
自分で書いてみよう ― ファイル入出力
ファイルへの書き込みと読み込みを擬似的に体験します(ブラウザ内のシミュレーションです)。
確認クイズ
この講座の理解度をチェックしましょう!
Q1. fopen の第2引数 "r" の意味は?
読み込み専用
書き込み専用
追記モード
"r" は read(読み込み)モードです。"w" が書き込み、"a" が追記モードです。
Q2. ファイル操作の最後に必ず行うべきことは?
free()
fclose()
return 0;
開いたファイルは必ず fclose() で閉じる必要があります。閉じないとデータが書き込まれない場合があります。
Q3. fopen が失敗したとき返される値は?
0
-1
NULL
fopen はファイルを開けなかった場合 NULL を返します。必ず戻り値を確認してエラー処理を行いましょう。
この講座の理解を深めるおすすめ書籍
サイトで動きを理解し、書籍で演習量を補うと効果的です
📘
苦しんで覚えるC言語
MMGames 著
初心者向けの定番入門書。丁寧な解説で基礎を固められます。
Amazonで見る
📗
新・明解C言語 入門編
柴田望洋 著
図解が豊富で、演習問題も充実。大学の教科書としても採用多数。
Amazonで見る
📙
プログラミング言語C 第2版
B.W.カーニハン, D.M.リッチー 著
通称K&R。C言語の原典。基礎を終えた後のステップアップに最適。
Amazonで見る
※ 上記リンクはアフィリエイトリンクです。購入によりサイト運営を支援いただけます。