前提・実現したいこと
fgets関数を使用してテキストファイルから一行ずつchar型の配列に読み込ませ、それをstdoutに出力させるプログラムにおいて、出力させる際の改行をなくしたいです。
以下のソースコード内のifdef部分を除くと、見た目はテキストファイルの中身のままstdoutに出力されます。そこで、私のしたいことは、標準出力に
1行目2行目3行目
と、改行をなくして出力させることです。
そのためにstrchr関数を使用して配列bufの要素の内改行文字を見つけてそれをnull文字('\0')に変更しました。しかし、ソースコードを実行すると
3行目
と出力されるだけでした。どのように修正すれば意図した結果にできるか、教えていただきたいです。
テキストファイル(test.txt)です
1行目 2行目 3行目
該当のソースコード
c
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4 5#define HOGE 6 7int main(void) 8{ 9 10 FILE *fp=fopen("test.txt","r"); 11 if(fp==NULL){ 12 fputs("ファイルオープンに失敗しました\n",stderr); 13 exit(EXIT_FAILURE); 14 } 15 16 for (;;) 17 { 18 char buf[80]; 19 if( fgets( buf, sizeof(buf), fp ) != NULL ){ 20 21 #ifdef HOGE 22 // 末尾が改行文字であれば、'\0' で上書きする 23 char* p = strchr( buf, '\n' ); 24 if( p != NULL ){ 25 *p = '\0'; 26 27 } 28 #endif 29 30 fputs(buf,stdout); 31 } 32 else{ 33 if( feof( fp ) ){ 34 break; 35 } 36 else{ 37 exit(EXIT_FAILURE); 38 } 39 } 40 41 } 42 43 if(fclose(fp)==EOF){ 44 fputs("ファイルクローズに失敗しました\n",stderr); 45 exit(EXIT_FAILURE); 46 } 47 48 return 0; 49} 50
補足情報(FW/ツールのバージョンなど)
コンパイラはgccを使っております。cygwinを使っております。
ソースコードはこちらのサイトのこのページから少し改変して使用させていただきました。
https://programming-place.net/ppp/contents/c/040.html#chomp
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/12 09:10