首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++将换行符从CR+LF更改为LF

C++将换行符从CR+LF更改为LF
EN

Stack Overflow用户
提问于 2009-10-08 06:24:41
回答 3查看 11.7K关注 0票数 23

我正在编写在Windows中运行的代码,并输出一个文本文件,该文件稍后将成为Linux程序的输入。当给定的文件包含换行符为CR+LF而不是LF时,此程序的行为不正确。

我知道我可以使用像dos2unix这样的工具,但我想跳过额外的步骤。有没有可能让Windows中的C++程序使用Linux换行符而不是Windows换行符?

EN

回答 3

Stack Overflow用户

发布于 2009-10-08 06:47:57

是的,您必须在“二进制”模式下打开文件以停止换行符转换。

具体操作方式取决于您打开文件的方式。

使用fopen

代码语言:javascript
复制
FILE* outfile = fopen( "filename", "wb" );

使用ofstream

代码语言:javascript
复制
std::ofstream outfile( "filename", std::ios_base::binary | std::ios_base::out );
票数 34
EN

Stack Overflow用户

发布于 2021-10-28 05:36:33

一种更简洁的解决方案是对LF字符使用ASCII转义序列(十进制10):'\012‘或'\x0A’表示一个显式的单行换行符,而与平台无关。请注意,这至少在某些编译器上不起作用;例如,在MSVC2019 16.11.6上,'\012''\x0A'都被转换为回车符和换行符。使用字符串文字("\012")还是字符文字('\012')也无关紧要。

此方法还可以避免字符串长度意外,因为'\n‘可以扩展到两个字符。但在UTF8中,当多字节unicode字符直接写入源代码中的字符串字面量时,也是如此。

另请注意,'\r‘是与平台无关的代码,用于单个回车(十进制13)。'\f‘字符不是换行符,而是换行符(十进制12),这在我所知道的任何平台上都不是换行符。C不为换行符提供单字符反斜杠转义,因此需要更长的八进制或十六进制转义。

票数 -1
EN

Stack Overflow用户

发布于 2009-10-09 15:14:19

好吧,这可能不是你想听到的,但这是我的0.02美元,基于我的经验:

如果您需要在不同的平台之间传递数据,从长远来看,您可能更好地使用一种不关心换行符的格式。如果是文本文件,用户有时会弄乱它们。如果把行尾弄乱了,导致你的应用程序失败,这将是一个支持密集型应用程序。

在那里,完成了,切换到了XML。让后援们高兴多了。

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

https://stackoverflow.com/questions/1535922

复制
相关文章

相似问题

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