【发布时间】:2009-04-21 20:20:47
【问题描述】:
Unix 有\n,Mac 是\r,但现在是\n,DOS/Win32 是\r\n。使用 C 创建文本文件时,如何确保使用适合操作系统的行尾字符?
【问题讨论】:
标签: c portability
Unix 有\n,Mac 是\r,但现在是\n,DOS/Win32 是\r\n。使用 C 创建文本文件时,如何确保使用适合操作系统的行尾字符?
【问题讨论】:
标签: c portability
fprintf(your_file, "\n");
如果您以文本模式打开文件,这将由您操作系统上的 stdio 库转换为适当的 EOL。在二进制模式下,不会发生转换。
【讨论】:
来自维基百科:
在文本模式下写入文件时,'\n' 被透明地翻译成 使用的本机换行序列 系统,可能长于一个 特点。 (请注意,一个 C 执行允许不存储 文件中的换行符。为了 例如,文本文件的行 可以存储为 SQL 表的行 或作为固定长度的记录。)当 以文本模式阅读,本机 换行序列被翻译回 '\n'。在二进制模式下,第二种模式 C 库支持的 I/O,无 进行翻译,并且 任何逃逸的内部表示 序列直接输出。
【讨论】:
当您以文本模式打开文件时(将“w”传递给fopen 而不是“wb”)写入文件的任何换行符将自动转换为系统的适当换行符序列。读取文件时,换行符序列将被转换回换行符。
这就是区分文本和二进制模式很重要的原因;如果您以二进制模式编写,C 将不会篡改您写入文件的字节。
【讨论】: