小编JMD*_*JMD的帖子

CRLF 行尾和 ostringstream

我正在尝试使用 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'
Run Code Online (Sandbox Code Playgroud)

由于 ostringstream 默认在文本模式下打开,我认为它会执行行尾转换(如 ofstream),但结果字符缓冲区不包含预期的 CRLF 行尾......

编辑:

对于那些想知道为什么我需要在内部使用 CRLF 结尾的人:我将文本复制到 Windows 剪贴板中,并且用户经常将该内容复制到记事本中,如果没有 CRLF 结尾,则在最后一次操作中会丢失行尾....

我的解决方案:

最后我决定使用 boost 库将 \n 替换为 \r\n:

boost::replace_all( str, "\n", "\r\n" );
Run Code Online (Sandbox Code Playgroud)

c++ newline ostringstream

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

c++ ×1

newline ×1

ostringstream ×1