c - ftell 返回不正确的值

标签 c netbeans getc ftell

我遇到了一个问题,ftell 返回的值不正确。我的代码在 linux 上的 netbeans 中运行时报告正确,但完全相同的代码在 windows 上的 netbeans 中运行时(使用 mingw)报告不正确。文件指针指向在 BINARY_READ 中打开的文件。在我的 linux netbeans 中,运行我的子程序后,ftell 报告 35。在我的 windows netbeans 中,调用相同的子程序后,ftell 是 3621。我跟踪了我的子程序,以下语句似乎导致了问题:

if (((header_size = getc (fp)) == EOF) || (header_size == 0))

在我的 linux netbeans 上,此语句后的 ftell(fp) 结果为 1。 但是在我的 windows netbeans 上,这条语句之后的 ftell(fp) 是 3585。

可能导致问题的原因是什么?

最佳答案

您需要以二进制模式打开文件:

fp = fopen(name, "rb");

或类似的。您应该养成始终这样做的习惯,因为在标准 C 中只有二进制模式具有明确定义的行为。在 POSIX 系统上,二进制和文本(默认)模式的行为相同,但在 Windows 上,换行符的修改发生在弄乱文件内容和偏移量的方式。

关于c - ftell 返回不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19260209/

相关文章:

c - 第 k 个最小的数字 - 快速排序比快速选择更快

java - Java EE 和 Java Web 之间的区别

c - getc 和 fscanf 之间的区别

使用 getc() 和 putc() 在 C 中复制文件文本 - 输出文件中的二进制代码

无法在 STM32F429I-Disco 板上使用 FMC 读取/写入外部 SRAM

c++ - 奇数 socket() 错误——返回 -1,但 errno=ERROR_SUCCESS

NetBeans PHPUnit 测试生成忽略 @assert 注释

java - 使用 TREAT( ... as ... ) 将查询向下转换为子类时出现异常

c - 如何从txt文件C制作数组

c++ - 使用 malloc 分配比现有内存更多的内存