Wal*_*hek 1 c netbeans ftell getc
我有一个问题,其中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))
Run Code Online (Sandbox Code Playgroud)
在我的linux netbeans上,此语句之后的ftell(fp)导致1.但在我的windows netbeans上,此语句后的ftell(fp)为3585.
可能导致问题的原因是什么?
您需要以二进制模式打开文件:
fp = fopen(name, "rb");
Run Code Online (Sandbox Code Playgroud)
或类似的.你应该养成这样做的习惯,因为只有二进制模式在标准C中具有明确定义的行为.在POSIX系统上,二进制和文本(默认)模式的行为相同,但在Windows上,新行的变换发生在弄乱文件内容和偏移的方式.