我正在尝试使用 ostringstream 来构建一个使用平台标准行结尾的字符串(所以对我来说它是 CRLF,因为我正在为 Windows 开发)。我尝试了以下代码:
std::ostringstream out;
out << "line1\nline2\n";
const char* result = out.str().c_str(); // In result end of lines are '\n' instead
// of the expected '\r\n'
由于 ostringstream 默认在文本模式下打开,我认为它会执行行尾转换(如 ofstream),但生成的 char 缓冲区不包含预期的 CRLF 行尾......
编辑:
对于那些想知道为什么我需要在内部使用 CRLF 结尾的人:我将文本复制到 Windows 剪贴板中,而用户经常将该内容复制到记事本中,并且在最后一次操作期间,如果没有 CRLF 结尾,行尾会丢失......
我的解决方案:
最后我决定使用boost库将\n替换为\r\n:
boost::replace_all( str, "\n", "\r\n" );