fgets()の改行を削除する

コマンドラインで実行すると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);                                /* ファイルを閉じる */
}

おすすめ

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください