アプリケーションの処理によって、
改行は2パターン(バイトデータ)
「 0D 0A 」(テキストデータ管理の基本)
「 0A 」(バイナリ時の1バイトでの改行)
しかし、クリップボードのテキストデータを保存するC++のプログラムを作成して分かったのだが、
クリップボード(コピー&ペーストのコピーしたときのバッファ)の形態のフォーマットはいくつもあり、
テキストデータを、
テキストデータ( sprintf など)としてメモリーをコピーしようとしたら、改行でバグのような状況になる。
勝手にデータを改変してしまうのだった。
0A => 0D 0A
つまり、テキストデータの改行は、
¥n = 0D 0A なので
↓↓勝手に変換
0D 0D 0A
つまり、アメブロ以外でも、コピペで
ブログなどでの多く改行してしまうバグは以下のような感じか?
クリップボードのテキストデータを、貼り付けしようとすると、
テキストデータなのに、貼り付ける側はバイナリと認識する
↓↓↓
\n = 0D 0A > 0D 0D 0A と変換する
↓↓↓
0D が2回続くので、2回改行と判断してしまい、表示の改行が2倍の量になる
プログラムでテキストのクリップボードのデータを、sprintf でバッファにコピーすると
同様なことが起きる。( 0A => 0D 0A)
¥n => 0D 0D 0A
クリップボードのテキストデータなのにバイナリと判断してテキストデータに直して
余計なデータを追加してしまう。
結論:
テキストデータ管理は他にも何かありそうなので、
基本はバイナリで管理して、
バイナリで保存する。
EOFや改行は自分で管理する。
テキストデータ管理関数は、勝手にデータを書き直すので使わない方が良い。
もしくは、テキストデータの場合、以下を注意する
●改行コード
●EOF処理
●文字数にNULLが含まれているかの確認