C言語には、ファイルから文字列を入力するための関数として fgets() 関数が、
ファイルに文字列を出力するための関数として fputs() 関数が用意されています。
今回のC言語超入門では、サンプルプログラムを使いながら、
ファイルから文字列を入出力する方法について解説いたします。
なお、ファイルのオープン・クローズについてはC言語超入門(第39回)、ファイルから1文字を入出力する方法についてはC言語超入門(第40回)を参照くださいませ。

ファイルから文字列を1行ずつ入力してファイルに1行ずつ出力するサンプルプログラム

/* プログラム1 */
#include <stdio.h>
int main(void){
    FILE *fpi, *fpo;
    char moji[BUFSIZ];
    /* <成功例> */
    if((fpi=fopen("file_in.txt","r"))==NULL) printf("file_in.txtファイルのオープンに失敗");
    else {
        if((fpo=fopen("file_out.txt","w"))==NULL) printf("file_out.txtファイルのオープンに失敗");
        else {
            while((fgets(moji,BUFSIZ,fpi))!=NULL) fputs(moji,fpo);
            fclose(fpo);
        }
        fclose(fpi);
    }
}

※事前に準備するファイル(file_in.txt)の内容
こんにちは。
私の名前はKyokoです。
C言語を勉強しています。
上記のプログラム1を実行しますと、以下の file_out.txt ファイルが新規に作成されます。
※プログラム1を実行した際に作成されるfile_out.txtファイルの内容
こんにちは。
私の名前はKyokoです。
C言語を勉強しています。

サンプルプログラムの解説

上記プログラム1は fopen() 関数を使い、8行目で文字を入力するファイルをオープンし、
10行目で文字を出力するファイルをオープンしています。
ファイルのオープン処理につきましては、getc()、putc()を使った1文字ずつファイルから入出力する処理と同じですから、ここでは割愛いたします。
もしプログラム1のファイルオープン処理について不明な点がありましたら、
「【C言語超入門(第39回)】ファイルからの入出力の方法を学ぼう(オープン、クローズ編)」を参照くださいませ。
さて、プログラム1の12行目では、fgets() で file_in.txt ファイルから文字列を入力し、
そのまま fputs() で file_out.txt に出力しています。
fgets() は、ファイルを読み終えるとNULLを返す仕様を利用して、
while文を使って fgets() が NULL を返すまで繰り返しています。
つまりプログラム1は、file_in.txt を file_out.txt にコピーするプログラム、という訳です。
これは「【C言語超入門(第40回)】ファイルからの入出力の方法を学ぼう(1文字の入出力編)」で紹介したプログラムと同じ結果になります。
このことから、ファイルの入出力というのは基本のパターンが決まっている、と言えます。
つまりファイル入出力基本パターンを覚えてしまえば、そのパターンを流用して、いろいろな処理を作ることができるようになる、と言うことです。

C言語超入門の第41回まとめ

さて今回のC言語超入門では、ファイルから文字列を入出力する fgets() 関数と fputs() 関数についてご説明いたしましたが、いかがでしたでしょうか。
最後にもう一度、fgets() 関数と fputs() 関数について、ポイントをまとめておきます。
・ファイルから文字列を入出力するために、fgets() 関数と fputs() 関数がある
・ ファイルの入出力というのは基本のパターンが決まっていることから、基本パターンを流用していろいろな処理を作ることができる
なお、ファイルのオープン・クローズについてはC言語超入門(第39回)、ファイルから1文字を入出力する方法についてはC言語超入門(第40回)を参照くださいませ。
ステップ・バイ・ステップ。焦らず一歩ずつ進んでいきましょう。