• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイルの内容をstrcpyを使ってコピーしたら…)

ファイルの内容をコピーする方法と出力結果の改行問題について

このQ&Aのポイント
  • strcpyを使ってファイルの内容をコピーすると、出力結果に改行が自動的に入ってしまいます。
  • 出力結果とファイルの内容を一致させるには、strcpyの代わりにstrncpyを使用し、出力時に改行を除去する必要があります。
  • ファイルの内容と出力結果が一致するコードの例を以下に示します。

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

  • ベストアンサー
回答No.2

#1さんの仰る通り、strcpyではなくfgetsの仕様です。 fgetsは改行まで読み込みますので。 http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=fgets&dir=jpman-9.1.2%2Fman§=0 「改行文字があるなら、保持されます。」 逆に、改行文字がない場合は改行が入らないのでprintfで勝手に\nをつけるとbufの大きさ以下の長さの行があった時、変なことになります。 while( fgets( set, 100, fp ) != NULL ){ strcpy(buf,set); printf("%s", buf); } のようにprintfで\n(改行)をつけないで書くと良いでしょう。 あと、別の処理をするために一時的にコピーがほしいならstrdupを使うという手もありますね。

nanaka2222
質問者

補足

なるほどいろいろ注意点があるのですね 参考になりました。 while( fgets( set, 100, fp ) != NULL ){ strcpy(buf,set); printf("%s", buf); } で簡単に修正できましたありがとうございました

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.3

既に回答されているようにfgets()で読み込んだバッファから改行コードを取り除くか >printf("%s\n", buf); で改行させないか…のどちらかでしょう。 1行が100バイトを越えている場合にどうなるか…というのはありますが。

nanaka2222
質問者

補足

多めにバイトを取ることによって回避したいと思います。 ありがとうございました

すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.1

>while( fgets( set, 100, fp ) != NULL ){ >strcpy(buf,set); fgets関数を使って読み取ったsetの最後に改行コードが入っているからです。 fgets関数の仕様です。 setの最後の改行を取り除くには、例えば下記のようなコードを書きます。 set[strlen(set) - 1] = '\0'; こうしておいてからstrcpyすれば、たぶん大丈夫です。

nanaka2222
質問者

補足

教えていただいた set[strlen(set) - 1] = '\0'; ですが最後の一文字が表示されなくなるバグがありました fgetsが自動的に改行されるとの事なので printf("%s",set); とすることで改行を取り除けましたありがとうございました

すると、全ての回答が全文表示されます。

関連するQ&A