【C言語】fgets関数を使って1行ずつテキストを取得する方法についてわかりやすく解説

この記事では、C言語のfgets関数の使い方について詳しく解説します。

fgets関数を使うことで、文字列の入力を安全に受け取ることができます。

また、具体的な使用例や注意点についても紹介しますので、C言語のプログラミング初心者の方にも分かりやすく解説します。

目次から探す

fgets関数とは

fgets関数は、C言語で文字列を入力するために使用される関数です。

標準入力から指定した文字数だけ文字列を読み込むことができます。

fgets関数の特徴

fgets関数は、以下のような特徴を持っています。

文字列の長さ制限

fgets関数は、指定したサイズ-1文字までの文字列を読み込むことができます。

これにより、バッファオーバーフロー(配列の範囲外への書き込み)を防ぐことができます。

改行文字の取り込み

fgets関数は、改行文字(‘\n’)を読み込んだ場合にも読み込みを終了します。での文字列を読み込むことができます。

そのため、ユーザーが入力した文字列に改行文字が含まれている場合でも、正しく読み込むことができます。

ヌル文字の自動追加

fgets関数は、読み込んだ文字列の末尾にヌル文字(‘\0’)を自動的に追加します。

これにより、文字列の終端を明示的に指定する必要がありません。

fgets関数の基本的な使い方

fgets関数は、C言語で文字列を入力する際に使用される関数です。

この関数を使うことで、ユーザーからの入力を受け取ることができます。

関数のシンタックス

fgets関数のシンタックスは以下の通りです。


char *fgets(char *str, int n, FILE *stream);

引数の意味は以下の通りです。

変数名説明
str文字列を格納するための配列へのポインタ
size読み込む文字列の最大長(配列のサイズ)
stream入力元のストリーム(通常は標準入力を指定)

戻り値

fgets関数は、成功した場合にはstrへのポインタを返します。

入力がエラーだった場合や、ファイルの終端に達した場合にはNULLを返します。

以下に、fgets関数の基本的な使い方の例を示します。


#include <stdio.h>
int main() {
    char str[100];
    printf("文字列を入力してください:");
    fgets(str, sizeof(str), stdin);
    printf("入力された文字列は:%s", str);
    return 0;
}

このプログラムでは、ユーザーに文字列の入力を促し、入力された文字列を表示します。

fgets関数を使うことで、ユーザーが改行を入力するまでの文字列を受け取ることができます。

なお、fgets関数は改行文字も読み込むため、入力された文字列には改行文字が含まれます。

fgets関数の具体的な使用例

ファイルからの入力を受け取る例

ファイルからの入力を受け取る場合、fgets関数を使用することで簡単に実現することができます。

以下に具体的な使用例を示します。


#include <stdio.h>
int main() {
    FILE *file;
    char buffer[100];
    // ファイルを開く
    file = fopen("input.txt", "r");
    if (file == NULL) {
        printf("ファイルを開けませんでした。\n");
        return 1;
    }
    // ファイルから1行ずつ読み込む
    while (fgets(buffer, sizeof(buffer), file) != NULL) {
        printf("%s", buffer);
    }
    // ファイルを閉じる
    fclose(file);
    return 0;
}

上記の例では、input.txtという名前のファイルを読み込みモードで開き、fgets関数を使ってファイルから1行ずつ読み込んでいます。

読み込んだ内容はbufferという配列に格納され、その内容をprintf関数を使って表示しています。

標準入力からの入力を受け取る例

標準入力からの入力を受け取る場合も、fgets関数を使用することができます。

以下に具体的な使用例を示します。


#include <stdio.h>
int main() {
    char buffer[100];
    printf("文字列を入力してください:");
    fgets(buffer, sizeof(buffer), stdin);
    printf("入力された文字列は:%s", buffer);
    return 0;
}

上記の例では、fgets関数を使って標準入力から文字列を受け取り、その内容をprintf関数を使って表示しています。

sizeof(buffer)を使ってbufferのサイズを指定しているため、入力された文字列がbufferのサイズを超える場合は切り捨てられます。

文字列の長さを制限する例

fgets関数は指定したバッファのサイズを超える文字列を受け取ると、バッファオーバーフローが発生する可能性があります。

そのため、文字列の長さを制限するためには注意が必要です。

以下に、文字列の長さを制限する例を示します。


#include <stdio.h>
#include <string.h>
int main() {
    char buffer[100];
    printf("文字列を入力してください:");
    fgets(buffer, sizeof(buffer), stdin);
    // 改行文字を削除する
    buffer[strcspn(buffer, "\n")] = '\0';
    // 文字列の長さを制限する
    if (strlen(buffer) > 10) {
        buffer[10] = '\0';
    }
    printf("入力された文字列は:%s", buffer);
    return 0;
}

上記の例では、fgets関数で受け取った文字列の末尾にある改行文字を削除するために、strcspn関数を使用しています。

また、strlen関数を使って文字列の長さを取得し、10文字を超える場合はbufferの11番目の要素に終端文字を代入しています。

以上がfgets関数の具体的な使用例です。

これらの例を参考にして、自分のプログラムに応用してみてください。

1 2

この記事のページ一覧
  1. 現在のページ
目次から探す