1. ホーム
  2. c

[解決済み] fgets()の入力から末尾の改行文字を削除しました。

2022-02-11 11:15:55

質問

ユーザーからあるデータを取得し、それをgccの別の関数に送ろうとしています。コードは以下のようなものです。

printf("Enter your Name: ");
if (!(fgets(Name, sizeof Name, stdin) != NULL)) {
    fprintf(stderr, "Error reading Name.\n");
    exit(1);
}

ただし、改行があることがわかる \n という文字が最後に入ります。ですから、もし私が John を送信してしまいます。 John\n . どうすれば \n を送信し、適切な文字列を送信します。

解決方法は?

エレガントな方法です。

Name[strcspn(Name, "\n")] = 0;

ちょっと不細工な方法。

char *pos;
if ((pos=strchr(Name, '\n')) != NULL)
    *pos = '\0';
else
    /* input too long for buffer, flag error */

ちょっと不思議な方法。

strtok(Name, "\n");

ただし strtok 関数は、ユーザーが空の文字列を入力した場合 (つまり Enter キーを押しただけ) には期待通りに動作しません。これは \n 文字をそのまま使用します。

もちろん、ほかにもありますよ。