コマンドラインで実行するとfgets()は改行を入れてしまう。
その後、fgetsの値を分岐させたり加工するときに不便。
fgets( ) で文字列 string[ ] に読み込んだとします。strlen(string) の戻り値を n とすると、配列の添え字はゼロから始まるので、string[n - 1] はNULL 文字の前にある改行コードになります。そこで、下記のコードで余分な改行コードを取り除くことができます。
string[n - 1] = '\0';
[例]
#include
#include /* exit( ) で必要 */
#include /* strlen( ) で必要 */
#define MAX_LEN 256 /* 1行の最大文字数 -1 */
void main(void);
void main(void)
{
FILE *fp;
char string[MAX_LEN]; /* 文字列を読み込む配列 */
int n = 1; /*行番号用カウンタ */
/* ファイルを開けなかったら */
if ((fp = fopen("LTest.c", "r")) == NULL) {
fprintf(stderr, "ファイルを開けません!\n");
exit (2); /* メッセージを表示して終了 */
}
/* ファイルから失敗するまで行単位で文字を読み込み */
while ((fgets(string, MAX_LEN - 1, fp)) != NULL) {
string[strlen(string) - 1] = '\0'; /* 余分な改行コードを削除 */
printf("%d:", n++); /*行番号を表示し */
puts(string); /*読み込んだ行を表示 */
}
fclose(fp); /* ファイルを閉じる */
}