- ベストアンサー
C++でのCRLFについて
VisualC++を使っています。 CStringを使ってテキストファイルに出力するのですが、 \r\nを入れると、2重に改行されるようなのです。 これはエディタの仕様によるのかもしれませんが、 メモ帳なら正常に改行されますが、NoEditorやExcelで開くと、 2重に改行されてしまいます。 \nにするとどのエディタでもうまくいきます。 WindowsではCRLFが改行ということで\r\nにしましたが、 どういうことなのでしょうか? CStringの影響でしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>CStringを使ってテキストファイルに出力するのですが、 どうやってファイルに出力していますか? Cランタイムでテキストモードで出力…の場合にランタイム側で\nを\r\nで出力する。 という処理がされている場合があります。 # テキストモードで読み込むと\r\nが\nになる。ということも。 その場合に\r\nを出力すると\r\r\nと出力されることになります。 出力結果をバイナリダンプなどで確認してみてはどうでしょうか? Windows内でも改行の扱いがそれぞれ異なる場合がありますので、その辺りは注意が必要かも知れません。 # コントロールに設定する時に改行が\r\nである必要があったり、\nだけでOKだったり…など。
その他の回答 (3)
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
No.2 です。 ちょっと補足。 No.1 で回答されているように、 \n は、「その処理系での改行」になります。 なので、普通は(特に、OSをまたがったりしなければ) \n で改行になります。
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
ちなみに、cr lf というのは、多分にタイプライタの文化を引きずったもので、 cr = その行の先頭に帰る lf = 1行送る です。 \n で、改行してしまいますが、\r\n だと、\r が余分です。 この、\r を、文字通り「その行の先頭に帰る」と見なせば、見かけ上普通に改行しているように見えるでしょう。 \r で、「改行」させるものだと、2重に改行しているように見えます。 環境によらず、cr lf を出力するには、\x0d\x0a と、直接指定してあげると、ほぼうまくいくようです。
- Tacosan
- ベストアンサー率23% (3656/15482)
C の世界では テキストファイルにおける改行 = \n だから.
お礼
CStdioFile.writestringで出しています。 改行文字はCRLFに変換される、とありました・・・。 おっしゃるとおり\r\r\nになっていたようです。 お騒がせしました。