• ベストアンサー

C++でのCRLFについて

VisualC++を使っています。 CStringを使ってテキストファイルに出力するのですが、 \r\nを入れると、2重に改行されるようなのです。 これはエディタの仕様によるのかもしれませんが、 メモ帳なら正常に改行されますが、NoEditorやExcelで開くと、 2重に改行されてしまいます。 \nにするとどのエディタでもうまくいきます。 WindowsではCRLFが改行ということで\r\nにしましたが、 どういうことなのでしょうか? CStringの影響でしょうか?

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

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

>CStringを使ってテキストファイルに出力するのですが、 どうやってファイルに出力していますか? Cランタイムでテキストモードで出力…の場合にランタイム側で\nを\r\nで出力する。 という処理がされている場合があります。 # テキストモードで読み込むと\r\nが\nになる。ということも。 その場合に\r\nを出力すると\r\r\nと出力されることになります。 出力結果をバイナリダンプなどで確認してみてはどうでしょうか? Windows内でも改行の扱いがそれぞれ異なる場合がありますので、その辺りは注意が必要かも知れません。 # コントロールに設定する時に改行が\r\nである必要があったり、\nだけでOKだったり…など。

nevertheless
質問者

お礼

CStdioFile.writestringで出しています。 改行文字はCRLFに変換される、とありました・・・。 おっしゃるとおり\r\r\nになっていたようです。 お騒がせしました。

その他の回答 (3)

回答No.3

No.2 です。 ちょっと補足。 No.1 で回答されているように、 \n は、「その処理系での改行」になります。 なので、普通は(特に、OSをまたがったりしなければ) \n で改行になります。

回答No.2

ちなみに、cr lf というのは、多分にタイプライタの文化を引きずったもので、 cr = その行の先頭に帰る lf = 1行送る です。 \n で、改行してしまいますが、\r\n だと、\r が余分です。 この、\r を、文字通り「その行の先頭に帰る」と見なせば、見かけ上普通に改行しているように見えるでしょう。 \r で、「改行」させるものだと、2重に改行しているように見えます。 環境によらず、cr lf を出力するには、\x0d\x0a と、直接指定してあげると、ほぼうまくいくようです。

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

C の世界では テキストファイルにおける改行 = \n だから.

関連するQ&A