gpt4 book ai didi

c - 在二进制模式下最好避免只使用 fgets() 吗?

转载 作者:太空狗 更新时间:2023-10-29 16:12:17 27 4
gpt4 key购买 nike

维基百科说:

The C library function fgets() is best avoided in binary mode because any file not written with the UNIX newline convention will be misread.

在二进制模式下最好避免使用 fgets() 吗?其他用于读取文件的 C 库函数怎么样?

谢谢。

最佳答案

fgets() 读取一行文本,以单个 '\n' 换行符终止(如果下一个输入行长于您正在使用的缓冲区)。

当在文本流上使用时,实际的行尾标记,无论它是如何表示的,都被转换为单个 '\n' 字符,所以 fgets() 将按预期工作。

fgets() 不太可能对二进制流有用。它仍然会读取字符直到缓冲区末尾或第一个 '\n' 字节,以先出现者为准。如果这恰好是您想要执行的操作,则没有特别的理由不使用 fgets()

二进制文件的内容具有您赋予它们的任何含义。如果给定的二进制文件使用 '\n' 作为分隔符——无论它是否恰好是系统的行尾标记用于文本文件——那么fgets() 可能会起作用。

但是,如果您有一个二进制文件,其中的记录 (?) 由 '\n' 字符标记,我不得不怀疑为什么它首先不是文本文件。

fgets() 旨在用于从文本流中读取行,但其工作方式由 C 标准严格定义。它被定义为通过重复调用 fgetc()好像一样工作。

如果它碰巧对其他东西有用,请随意使用它。但是您的要求中的任何细微变化,例如使用 '\n' 以外的字符作为分隔符,都可能意味着 fgets() 将不再有效。

只是为了清楚起见,您最好编写一个自定义函数来使用二进制输入执行您想要的操作。

关于c - 在二进制模式下最好避免只使用 fgets() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25828839/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com