C言語のfgets()・fputs()関数によるファイル文字列入出力の解説
ファイルとは、レコードの集合体であり、データを恒久的に保存しておくためのハードディスク上の場所のことです。C言語では、これらのファイルに対してさまざまな入出力操作を行うことができます。
ファイルに対する主な操作
C言語でファイルに対して行える基本的な操作には、以下のようなものがあります。
- ファイルの命名
- ファイルのオープン
- ファイルからの読み込み
- ファイルへの書き込み
- ファイルのクローズ
基本の書式
まず、ファイルポインタを宣言する構文は以下のとおりです。
FILE *ファイルポインタ;
宣言例:
FILE *fptr;
続いて、ファイル名を指定してファイルを開く構文は以下のとおりです。
ファイルポインタ = fopen("ファイル名", "モード");具体的な使用例:
fptr = fopen("sample.txt", "r");
FILE *fp;
fp = fopen("sample.txt", "w");fgets() 関数と fputs() 関数とは
fgets() は、ファイルから1行分の文字列を読み込むための関数です。
fgets()関数の構文は以下のとおりです。
fgets(文字列変数, 読み込む文字数, ファイルポインタ);
使用例:
FILE *fp; char str[30]; fgets(str, 30, fp);
fputs() は、文字列をファイルに書き込むための関数です。
fputs()関数の構文は以下のとおりです。
fputs(文字列変数, ファイルポインタ);
使用例:
FILE *fp; char str[30]; fputs(str, fp);
サンプルプログラム
以下は、fputs()関数で文字列をファイルに書き込み、fgets()関数でその内容を読み出して表示するCプログラムの例です。
#include <stdio.h>
int main(){
FILE *fptr = fopen("sample.txt","w");
fputs("TutorialPoints
",fptr);
fputs("C programming
",fptr);
fputs("Question & Answers",fptr);
fclose(fptr);
fptr = fopen("sample.txt","r");
char string[30];
while(fgets(string,30,fptr)!=NULL){
printf("%s",string);
}
fclose(fptr);
return 0;
}このプログラムでは、まず「書き込みモード(w)」でファイルを開き、3つの文字列を書き込んだ後に一度閉じています。その後、「読み取りモード(r)」で再度開き、fgets()が NULL を返すまで(つまりファイルの終端に達するまで)1行ずつ読み込んで標準出力に表示しています。
実行結果
上記のプログラムを実行すると、以下の出力が得られます。
TutorialPoints C programming Question & Answers
このように、fputs()とfgets()を組み合わせることで、テキストファイルへの文字列の保存と読み出しを簡単に行うことができます。
-
【C言語入門】ポインタと配列の関係をわかりやすく解説|スケールファクタとは
ポインタと配列の基本的な関係 C言語では、コンパイラが配列のすべての要素に対して連続したメモリ領域を自動的に割り当てます。ここで重要になるのが「ベースアドレス」です。ベースアドレスとは、配列の先頭要素(0番目の要素)が格納されているメモリアドレスのことを指します。 例えば、次のように配列を宣言してみましょう。 int a[5] = {10, 20, 30, 40, 50}; この場合、5つの要素はメモリ上に以下のように順番に格納されます。 ここで変数「p」をint型へのポインタとして宣言すれば、次のいずれかの代入文によって、配列aの先頭アドレスをポインタに持たせることができます。 p =
-
C言語入門:モノリシックプログラミングとモジュラープログラミングの違いを徹底解説
本記事では、C言語におけるモノリシックプログラミングとモジュラープログラミングの違いを、それぞれのメリット・デメリットとともに詳しく解説します。 モノリシックプログラミングとは プログラム全体を1つの関数、すなわちmain関数だけですべて記述する方式を「モノリシック(一枚岩)型プログラミング」と呼びます。しかし、すべてのロジックを単一の関数に詰め込むのは、良いプログラミングスタイルとは言えません。 デメリット モノリシックプログラミングには、以下のような欠点があります。 プログラムが非常に大きく、複雑になりやすい。 デバッグ、テスト、保守が非常に困難になる。 モジュラープログラミングとは