[英]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 write
和read
)。 但这并不重要:行尾转换是在文本模式下执行的,而在二进制模式下则没有任何改变。
printf
和其他格式化函数最终会调用一个低级读/写/处理该行结束转换的任何函数。
\\n
时,系统会在换行符之前添加一个\\r
字符。 \\n
时,系统会删除换行符之前的\\r
字符。 如果没有,它不会删除任何内容。 如果有2个\\r
字符,则只会删除一个。 请注意,如果要编写不带\\r
字符的Linux兼容文本文件,以二进制模式编写文本文件可能会很有用。
在Windows中对文本文件使用fprintf()和fscanf()时,与二进制模式相比,是否有必要或建议以文本模式打开文件?
fprintf / fscanf基于低级函数fputc / fgetc等,因此模式text / binary的管理遵循我们在Do fgetc
, fputc
, fgets
和fputs
看到的相同规则,要求以文本模式打开文件,而fread
和fwrite
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.