プロが教える店舗&オフィスのセキュリティ対策術

VisualC++を使っています。

CStringを使ってテキストファイルに出力するのですが、
\r\nを入れると、2重に改行されるようなのです。

これはエディタの仕様によるのかもしれませんが、
メモ帳なら正常に改行されますが、NoEditorやExcelで開くと、
2重に改行されてしまいます。

\nにするとどのエディタでもうまくいきます。

WindowsではCRLFが改行ということで\r\nにしましたが、
どういうことなのでしょうか?
CStringの影響でしょうか?

A 回答 (4件)

>CStringを使ってテキストファイルに出力するのですが、



どうやってファイルに出力していますか?

Cランタイムでテキストモードで出力…の場合にランタイム側で\nを\r\nで出力する。
という処理がされている場合があります。
# テキストモードで読み込むと\r\nが\nになる。ということも。
その場合に\r\nを出力すると\r\r\nと出力されることになります。
出力結果をバイナリダンプなどで確認してみてはどうでしょうか?

Windows内でも改行の扱いがそれぞれ異なる場合がありますので、その辺りは注意が必要かも知れません。
# コントロールに設定する時に改行が\r\nである必要があったり、\nだけでOKだったり…など。
    • good
    • 0
この回答へのお礼

CStdioFile.writestringで出しています。
改行文字はCRLFに変換される、とありました・・・。

おっしゃるとおり\r\r\nになっていたようです。
お騒がせしました。

お礼日時:2012/11/09 09:28

No.2 です。


ちょっと補足。

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

ちなみに、cr lf というのは、多分にタイプライタの文化を引きずったもので、


cr = その行の先頭に帰る
lf = 1行送る
です。
\n で、改行してしまいますが、\r\n だと、\r が余分です。
この、\r を、文字通り「その行の先頭に帰る」と見なせば、見かけ上普通に改行しているように見えるでしょう。
\r で、「改行」させるものだと、2重に改行しているように見えます。

環境によらず、cr lf を出力するには、\x0d\x0a と、直接指定してあげると、ほぼうまくいくようです。
    • good
    • 0

C の世界では


テキストファイルにおける改行 = \n
だから.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A