目次から探す
fgets関数の注意点と解決策
fgets関数
は、入力された文字列に改行文字も含めて読み込みます。
つまり、改行文字も文字列の一部として扱われます。
例えば、以下のようなコードを考えてみましょう。
#include <stdio.h>
int main() {
char str[100];
printf("文字列を入力してください:");
fgets(str, sizeof(str), stdin);
printf("入力された文字列:%s", str);
return 0;
}
このコードでは、ユーザーに文字列の入力を求め、入力された文字列を表示します。
しかし、fgets関数
は改行文字も読み込むため、ユーザーが改行を入力すると、改行文字も含めて文字列が表示されます。
文字列を入力してください:Hello World
入力された文字列:Hello World
このような場合、改行文字を除外するために、文字列の最後にある改行文字を削除する必要があります。
以下のような方法で改行文字を削除することができます。
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
printf("文字列を入力してください:");
fgets(str, sizeof(str), stdin);
// 文字列の最後にある改行文字を削除する
str[strcspn(str, "\n")] = '\0';
printf("入力された文字列:%s", str);
return 0;
}
strcspn関数
は、指定した文字列の中で最初に出現する文字の位置を返す関数です。
ここでは、改行文字(“\n”)が最初に出現する位置を取得し、その位置にある文字をヌル文字(‘\0’)で置き換えることで、改行文字を削除しています。