我正在编写在Windows中运行的代码,并输出一个文本文件,该文件稍后将成为Linux程序的输入。当给定的文件包含换行符为CR+LF而不是LF时,此程序的行为不正确。
我知道我可以使用像dos2unix这样的工具,但我想跳过额外的步骤。有没有可能让Windows中的C++程序使用Linux换行符而不是Windows换行符?
发布于 2009-10-08 06:47:57
是的,您必须在“二进制”模式下打开文件以停止换行符转换。
具体操作方式取决于您打开文件的方式。
使用fopen
FILE* outfile = fopen( "filename", "wb" );使用ofstream
std::ofstream outfile( "filename", std::ios_base::binary | std::ios_base::out );发布于 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不为换行符提供单字符反斜杠转义,因此需要更长的八进制或十六进制转义。
发布于 2009-10-09 15:14:19
好吧,这可能不是你想听到的,但这是我的0.02美元,基于我的经验:
如果您需要在不同的平台之间传递数据,从长远来看,您可能更好地使用一种不关心换行符的格式。如果是文本文件,用户有时会弄乱它们。如果把行尾弄乱了,导致你的应用程序失败,这将是一个支持密集型应用程序。
在那里,完成了,切换到了XML。让后援们高兴多了。
https://stackoverflow.com/questions/1535922
复制相似问题