我正在尝试使用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一样),但得到的字符缓冲区并不包含预期的CRLF行尾...
编辑:
对于那些想知道为什么我需要CRLF内部结束的人:我将文本复制到Windows剪贴板,用户经常将内容复制到记事本,如果没有CRLF结束,在最后一次操作中行尾就会丢失……
我的解决方案是:
最后,我决定使用boost库将\n替换为\r\n:
boost::replace_all( str, "\n", "\r\n" );发布于 2011-03-29 16:31:56
嗯,'\n‘是,它是行尾的内部表示。
只有当您写入外部文件时,它才会被转换(如果需要!)添加到外部表示。在某些系统上,行的结尾只有一个字符,如果用隐藏的长度值存储,甚至根本没有字符。
发布于 2011-03-29 16:31:17
文本模式和二进制模式的区别完全是std::filebuf。这在其他地方并不相关。
我不知道为什么在内部字符串中只需要"\n“,但这并不困难:只需定义
char const newline[] = "\x0D\x0A"; // Or whatever the convention is并将其输出。
https://stackoverflow.com/questions/5469775
复制相似问题