fgets
文字列の最後に改行を残します。これは、後で次の行を追加するとはっきりとわかります。
printf ("[%s]\n", temp);
次のように表示されます。
[file1
]
使用する前に削除する必要があります。これは、次のような方法で行うことができます。
size_t sz = strlen (temp);
if (sz > 0)
if (temp[sz-1] == '\n')
temp[sz-1] = '\0';
この効果は、次の完全なプログラムで実際に確認できます。
#include <stdio.h>
#include <string.h>
int main (void) {
size_t sz;
char temp[30];
printf ("\n> ");
while (fgets (temp, sizeof(temp), stdin) != NULL) {
printf ("before: [%s]\n", temp);
sz = strlen (temp);
if (sz > 0) {
if (temp[sz-1] == '\n') {
temp[sz-1] = '\0';
}
}
printf ("after : [%s]\n", temp);
printf ("\n> ");
}
return 0;
}
基本的には正確な方法を使用してfgets
(ただし標準入力から)行を取得し、末尾の改行を削除する前後の両方で結果を出力します。サンプルの実行は次のとおりです。
pax> ./testprog
> hello
before: [hello
]
after : [hello]
> goodbye
before: [goodbye
]
after : [goodbye]
> [CTRL-D]
pax> _
また、そのコード セグメントの他のいくつかのことを確認することもできます。
- ループ
{
の終わりでの開き中括弧の使用。while
- ループ内でファイルを開き、それらに対して何もしていないという事実 (ファイルを閉じることを含む)。
"rb"
オープンモードの使用。通常、これは不要です。テキスト ファイルであることがわかっている場合は、もちろん不要です。
- 失敗する可能性のある関数 ( など) の戻りコードは、使用する前に常に確認する必要があり
fopen
ます。
main
引数を必要としない Cの正規形は ですint main (void)
。