この記事では、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関数
の具体的な使用例です。
これらの例を参考にして、自分のプログラムに応用してみてください。