首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >改变std::用CR+LF代替LF

改变std::用CR+LF代替LF
EN

Stack Overflow用户
提问于 2009-10-30 19:50:02
回答 4查看 15.5K关注 0票数 11

我在Linux平台上编写一个程序,生成文本文件,不可避免地会在Windows平台上查看。

现在,将std::endl传递给ostream只会为换行符生成CR字符。当然,这些文本文件在MS记事本中看上去是错误的。

  1. 是否有一种方法可以更改std::endl,使其将CR+LF用于换行符而不是LF?
  2. 我知道我可以写我自己的自定义操作程序,比如win_endl,用来生成我自己的换行符,但是我在很多地方都使用了std::endl符号,而且像许多程序员一样,我倾向于做一些最不需要工作的事情。我是否可以简单地重载std::endl以生成CR+LF,或者对于可维护性来说这是一个愚蠢的想法?

注:我查过这个问题了,但它问的是另一条路,而且被接受的答案似乎还不完整。

EN

回答 4

Stack Overflow用户

发布于 2009-10-30 19:55:34

std::endl是最基本的:

代码语言:javascript
复制
std::cout << "\n" << std::flush;

因此,只需使用"\r\n"代替,并省略同花顺。那样也更快!

来自endl上的ostream头文件:

当需要一个简单的换行符时,这个机械手经常被错误地使用,导致缓冲性能差。

票数 13
EN

Stack Overflow用户

发布于 2009-10-30 19:59:52

Windows记事本几乎是唯一一个你会发现没有正确处理LF文件的Windows程序。几乎所有其他东西(包括WordPad)都能很好地处理LF文件。

这个问题是记事本中的一个错误。

票数 7
EN

Stack Overflow用户

发布于 2009-10-30 19:57:15

您不应该使用\r \n,只需使用\n,然后以"text“模式打开流,这比为您进行转换要好。你可能不在乎跨平台,但这是官方的做法。

这样,相同的代码将在unix上吐出\n,在windows上吐出\r,在mac上吐出\r。

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

https://stackoverflow.com/questions/1651936

复制
相关文章

相似问题

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