繁体   English   中英

Windows中的`fprintf()`和`fscanf()`是否需要以文本模式打开文件

[英]Does `fprintf()` and `fscanf()` in Windows require a file to be opened in text mode

在Windows中对文本文件使用fprintf()fscanf()时,与二进制模式相比,是否有必要或建议以文本模式打开文件?

答案是否取决于在Windows中使用Microsoft对标准C库或GNU Libc的实现?

在Windows中,二进制或文本模式根据行尾转换而有所不同。

系统进行行尾转换(例如,通过低级POSIX writeread )。 但这并不重要:行尾转换是在文本模式下执行的,而在二进制模式下则没有任何改变。

printf和其他格式化函数最终会调用一个低级读/写/处理该行结束转换的任何函数。

  • 在以文本模式打开的文件中写入换行符\\n时,系统会在换行符之前添加一个\\r字符。
  • 在以文本模式打开的文件中读取\\n时,系统会删除换行符之前的\\r字符。 如果没有,它不会删除任何内容。 如果有2个\\r字符,则只会删除一个。

请注意,如果要编写不带\\r字符的Linux兼容文本文件,以二进制模式编写文本文件可能会很有用。

在Windows中对文本文件使用fprintf()和fscanf()时,与二进制模式相比,是否有必要或建议以文本模式打开文件?

fprintf / fscanf基于低级函数fputc / fgetc等,因此模式text / binary的管理遵循我们在Do fgetcfputcfgetsfputs看到的相同规则,要求以文本模式打开文件,而freadfwrite require二进制模式下的文件?

答案是否取决于在Windows中使用Microsoft对标准C库或GNU Libc的实现?

mingw libc支持我的Microsoft libs,其行为是Microsoft libc之一,某些功能遵循ISO,但不是GNU / gcc,这是一种实现,不是一种标准。 请注意,通常Microsoft并不完全符合任何特定的POSIX标准(请参阅Microsoft Docs中的兼容性 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM