在Windows的文本文件上使用fprintf()
和fscanf()
时,与二进制模式相比,是否有必要或建议以文本模式打开文件?
答案是否取决于在Windows中使用Microsoft对标准C库或GNU Libc的实现?
答案 0 :(得分:3)
在Windows中,二进制或文本模式根据行转换的结束而有所不同。
系统进行行尾转换(例如,通过低级POSIX write
和read
)。但这并不重要:行尾转换是在文本模式下执行的,而在二进制模式下则没有任何改变。
printf
和其他格式设置函数最终调用处理该行结束转换的低级读取/写入/任何函数。
\n
时,系统会在换行符之前添加一个\r
字符。\n
时,系统会删除换行符之前的\r
字符。如果没有,它不会删除任何内容。如果有2个\r
字符,则只会删除一个。请注意,如果要编写不带\r
字符的Linux兼容文本文件,以二进制模式编写文本文件会很有用。
答案 1 :(得分:2)
在Windows中对文本文件使用fprintf()和fscanf()时,与二进制模式相比,是否有必要或建议以文本模式打开文件?
fprintf / fscanf 基于低级函数 fputc / fgetc 等,因此该模式的管理文本/二进制遵循我们在Do fgetc
, fputc
, fgets
and fputs
require a file opened in text mode, and fread
and fwrite
require a file in binary mode?
答案是否取决于在Windows中使用Microsoft对标准C库或GNU Libc的实现?
mingw libc在我的Microsoft libs中受支持,其行为是Microsoft libc之一,某些功能遵循ISO但不是GNU / gcc,这是一种实现,不是一种标准。请注意,通常Microsoft并不完全符合任何特定的POSIX标准(请参阅Compatibility in Microsoft Docs)