首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CRLF行尾和ostringstream流

CRLF行尾和ostringstream流
EN

Stack Overflow用户
提问于 2011-03-29 16:27:07
回答 2查看 15.6K关注 0票数 5

我正在尝试使用ostringstream来构建一个使用平台标准行尾的字符串(所以对我来说,它就是CRLF,因为我是为Windows开发的)。我尝试了以下代码:

代码语言:javascript
复制
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一样),但得到的字符缓冲区并不包含预期的CRLF行尾...

编辑:

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

我的解决方案是:

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

代码语言:javascript
复制
boost::replace_all( str, "\n", "\r\n" );
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-29 16:31:56

嗯,'\n‘,它是行尾的内部表示。

只有当您写入外部文件时,它才会被转换(如果需要!)添加到外部表示。在某些系统上,行的结尾只有一个字符,如果用隐藏的长度值存储,甚至根本没有字符。

票数 2
EN

Stack Overflow用户

发布于 2011-03-29 16:31:17

文本模式和二进制模式的区别完全是std::filebuf。这在其他地方并不相关。

我不知道为什么在内部字符串中只需要"\n“,但这并不困难:只需定义

代码语言:javascript
复制
char const newline[] = "\x0D\x0A";  //  Or whatever the convention is

并将其输出。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5469775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档