将endline插入到字符串流中

时间:2011-07-28 20:41:45

标签: c++ newline stringstream end-of-line

我们知道,在文件流中插入\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???
}

2 个答案:

答案 0 :(得分:13)

系统特定的行结尾仅与文本文件相关。只要流只在内存中,它就是'\n'

答案 1 :(得分:3)

简短回答

长答案

文本模式下的文件流会将特定于平台的ELS插入到文件中。但是,当读取文件时,ELS会转换回\n,因此应用程序永远不会看到这一点。因此,即使使用文件流(在文本模式下),您也永远不会看到ELS。

返回std::stringstream。如果代码确实插入了特定于平台的ELS(它没有),那么当您读取流时,您仍然希望在读取它时看到\n,因为您希望将ELS转换回来。这样做没什么意义。