• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイルに文字列を書く)

ファイルに文字列を書く方法と改行の制御

このQ&Aのポイント
  • ファイルに文字列を書く方法と改行の制御について説明します。
  • ファイルを2つ読み込んでファイルを書き直そうとした際に、改行の書き込みがおかしくなる問題が発生します。改行を一回だけする方法についても解説します。
  • 質問者が求める要点は、ファイルに文字列を書き込む方法と、改行を一回だけする方法です。これらについて詳しく説明します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

最初に書いたときに、「余計な改行」が付く ↓ 次に読むのは、その「余計な改行」が付いたファイル それを出力するときに、また「余計な改行」が付く ... を繰り返してるんじゃないですか? このchat_data.txt を、コピーして次はmoto.txt にしてるとか無いですか? あと > tm[999] = (char*)malloc(strlen(buf+1)); これ、1000行以上あると、解放できませんね。

nanaka2222
質問者

補足

<<最初に書いたときに、「余計な改行」が付く ↓ 次に読むのは、その「余計な改行」が付いたファイル それを出力するときに、また「余計な改行」が付く ... を繰り返してるんじゃないですか? まさしくそんな感じですね もしかしたら余計な改行を入れていたのが原因かもしれませんね もう一度ソースを見直してみますね <<このchat_data.txt を、コピーして次はmoto.txt にしてるとか無いですか? 言われてきづいたのですが質問用のプログラムとして書いたときに変更し忘れていました chat_data.txtではなくmoto.txtと書き換えてください そのためおかしな質問をしていました 申し訳ありません >>あと > tm[999] = (char*)malloc(strlen(buf+1)); これ、1000行以上あると、解放できませんね。 1001行目をなしにするつもりで書きました ちょっとここら辺はこのバグを何とかしたらちゃんと1000行になるか確認したかったので、ちゃんとできてる傘は確認してません

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

fgets の仕様については既に指摘されているところだったりします. cf. http://okwave.jp/qa/q7819645.html そしてこのプログラムにもしっかりバグが入っている. ところで if(i!=(sei-1)){ fprintf(fp,"\n"); } における if の存在意義ってなんだろう.

nanaka2222
質問者

お礼

ちなみに5個なら tm[0] tm[1] \n tm[2] \n \n tm[3] \n \n \n tm[4] となります tmを個と数えましたが 正確にはプログラムを数回起動させて処理したときの個数のときになります tm[0] \n tm[1] \n tm[2] \n tm[3] \n tm[4] \n 上の感じならfgetsのバグだと私も思うんですけどね 以前もあったので

nanaka2222
質問者

補足

これは全体の一部をくりぬいて質問用のプログラムにしているのですが、元のプログラムは一行だけ他と違うように変える必要があったのです そのためへんなプログラムに見えたらすみませんね もう少しバグについて話すならtmが2つだけなら問題がなく 3個なら tm[0] tm[1] \n tm[2] 4個なら tm[0] tm[1] \n tm[2] \n \n tm[3] となってしまいます

回答No.1

fgetsは読み込んだデータの改行をそのまま残すので、そのデータに対して改行を付加して書き込めば、当然改行が二重になります。

nanaka2222
質問者

補足

えっと読み込んだときには待ったく問題なく表示されたのですが、書き込むときにはおかしくなっちゃうのです

関連するQ&A