【问题标题】:C/C++ print custom EOLC/C++ 打印自定义 EOL
【发布时间】:2019-04-28 02:40:06
【问题描述】:

我想在 Windows 上为 UNIX 生成一个文件(脚本)。所以我只需要输出LF 字符,而不输出CR 字符。

当我执行fprintf(fpout, "some text\n"); 时,文件中的字符\n 会自动替换为\r\n

有没有办法专门输出\n (LF) 字符?

语言是 C++,但 I/O 函数来自 C。

【问题讨论】:

  • 如果没有简单的解决方案,解决方法是使用putchar()

标签: c++ c printf output eol


【解决方案1】:

你可以用二进制模式打开文件,例如

FILE *fpout = fopen("unixfile.txt", "wb");

fprintf(fpout, "some text\n"); // no \r inserted before \n

因此,您传递给fprintf 的每个字节都被解释为一个字节而不是其他任何内容,这应该忽略从\n\r\n 的转换。

来自std::fopen上的cppreference:

可以选择指定文件访问模式标志“b”以二进制模式打开文件。此标志对 POSIX 系统没有影响,但在 Windows 上,例如,它禁用对 '\n' 和 '\x1A' 的特殊处理。

【讨论】:

  • 这个问题是一个绝妙的巧合,我刚刚在 Arthur O'Dwyer 的 STL 书中昨天读到了这个问题。作者也毫不掩饰自己对 Windows 如何处理换行符的看法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 2023-03-15
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多