2011-07-28 1 views
5

\nをファイルストリームに挿入すると、システムの適切な行末シーケンスがファイルに書き込まれます(Windowsの場合は\r\nなど)。 std::stringstreamにエンドラインを挿入すると、システムに適した行末シーケンスが文字列に書き込まれますか?たとえば:エンドストリングをストリングストリームに挿入する

#include <sstream> 

int main() 
{ 
    std::ostringstream oss; 
    oss << std::endl; 
    std::string endlineSequence = oss.str(); 
    bool isWindows = enlineSequence == "\r\n"; 
    bool isOldMac = endlineSequence == "\r"; 
    bool isUnix = endlineSequence == "\n"; 
    // Will this work??? 
} 
+1

あなたの時間を節約するために、あなたのプログラムの 'bool'がすべて' true'かどうかを確認して実行することができます。 'isWindows'と' isMac'は 'false'と評価されます。 –

+0

@Aditya:各プラットフォームで試してみる必要があります。誰もがWindows、Mac、Unixの箱を自由に使用できるわけではありません。 :-) –

+0

@Emile:いいえ、Windowsで試してみるだけです。 '\ n'を書いて' \ r \ n 'を得ると、それはネイティブの改行に変換されるので、もしあなたが '\ n'を得るならそれはしません。 LinuxやMacOS Xでは気にならない。 WindowsとLinuxマシンの両方で –

答えて

11

システム固有の行末は、テキストファイルにのみ関連しています。ストリームがメモリ内にある限り、それはちょうど'\n'です。

+6

文字列の中で '\ n'という文字は何になりますか?翻訳が文字列ストリームで行われたとします。 'sstream1 <<" \ n "となる混乱を考えてください。 sstream2 << stream1.str(); ...; std :: cout << sstream99.str(); ' –

3

短い回答いいえ

長い答え

テキストモードでファイルストリームをファイルに、プラットフォーム固有のELSを挿入します。しかし、ファイルが読み込まれると、ELSが\nに変換されるため、アプリケーションはこれを見ません。したがって、ファイルストリーム(テキストモード)でさえ、ELSは決して見えません。

に戻るstd::stringstreamに戻る。コードにプラットフォーム固有のELSが挿入されていた場合、ストリームを読み取ったときにELSを元に戻すことを期待しているので、それを読み取ると\nと表示されます。そうすることにはほとんど意味がありません。

関連する問題