fgets() 入力から末尾の改行文字を削除する 質問する

fgets() 入力から末尾の改行文字を削除する 質問する

ユーザーからデータを取得して、それを 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

ベストアンサー1

おそらく最も簡単な解決策は、私のお気に入りのあまり知られていない関数の1つを使用する方法です。strcspn():

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

また、次のことも処理したい場合'\r'(たとえば、ストリームがバイナリの場合):

buffer[strcspn(buffer, "\r\n")] = 0; // works for LF, CR, CRLF, LFCR, ...

'\r'この関数は、または に当たるまで'\n'(つまり、最初の'\r'または を見つけるまで)文字数をカウントします'\n'。何も当たらない場合は、 で停止します'\0'(文字列の長さを返します)。

strcspnは で停止するため、改行がない場合でもこれは正常に機能することに注意してください'\0'。その場合、行全体が に置き換えられる'\0'だけです'\0'

おすすめ記事