J. *_*fer 10 c++ linux windows stl newline
我正在Linux平台上编写一个程序,该程序生成的文本文件将不可避免地在Windows平台上进行查看.
现在,传入std::endl
a ostream
仅为换行生成CR字符.当然,这些文本文件在MS记事本中看起来不对.
std::endl
它使用CR + LF换行而不是LF?win_endl
,用于生成我自己的换行符,但我std::endl
在很多地方使用该符号,并且像许多程序员一样,倾向于做需要尽可能少工作的事情.我可以简单地重载std::endl
以产生CR + LF,或者这对可维护性来说是一个愚蠢的想法?注意:我查了一下这个问题,但是它问的是另一种方式,接受的答案似乎相当不完整.
ebo*_*ebo 10
std::endl
基本上是:
std::cout << "\n" << std::flush;
Run Code Online (Sandbox Code Playgroud)
所以只需使用"\r\n"
而省略刷新.这样也快!
从endl上的ostream头文件:
当需要简单的换行符时,经常错误地使用该操纵器,导致差的缓冲性能.
Jos*_*ley 10
在文本模式下打开文件应该导致std::endl
转换为适合您的平台的相应行.你的问题是,换行符是适合你的平台,但您所创建的文件不适用于您的平台.
我不确定你计划如何进行重载或更改endl
,并且对于任何刚接触项目的开发人员而言,改变其行为肯定会令人惊讶.我建议切换到win_endl(应该是一个简单的搜索和替换)或者可以从标准切换ostream
到Boost.Iostreams过滤流来为您进行转换.
Windows Notepad几乎是唯一一个不能正确处理LF文件的Windows程序.几乎所有其他东西(包括写字板)都可以正常处理LF文件.
此问题是记事本中的错误.