c - 为什么 ftell() 在 fread() 之后显示错误的位置?

标签 c file fread

我在尝试使用 c fread() 调用从一个简单的文本文件中读取时遇到了一个非常奇怪的错误。
我制作了一个非常简单的程序来显示该错误:

int main(int argc ,char ** argv) {
  FILE* fh = fopen("adult.txt","r");
  if(fh==NULL){
    printf("error opening file\n");
    exit(0);
  }

  int s = 1000;
  printf("cur before=%d\n",ftell(fh));
  char* b = malloc (sizeof(char)*s);
  int k =fread(b,sizeof(char),s,fh);
  printf("cur after reading %d bytes =%d\n",k,ftell(fh));

  return EXIT_SUCCESS;
}

我得到的输出是:

cur before=0
cur after reading 1000 bytes =1007

这正常吗? fread 返回数字“1000”,但光标(使用 ftell())显示 1007,我们将不胜感激。

最佳答案

这很正常。

'\n' 可以用两个字符表示,因此您会遇到偏差。

如果您不希望这种情况发生,请以二进制模式打开 finaly。

关于c - 为什么 ftell() 在 fread() 之后显示错误的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10651108/

相关文章:

c - include/linux/sched.h 中的 struct sched_domain 代表什么(内核中的调度域)

c++ - Redis命令ERR:参数数量不正确hiredis

c - 如何恢复被 sigwaitinfo/sigwait 挂起的线程?如何检查信号队列?

c - 在C中将文本文件读取到数组中

C fread() 矩阵,无论矩阵大小如何,都读入九个错误值

c - 尝试理解链表和结构

php - PHP 中的 UPLOAD_ERR_EXTENSION (#8)?

Python 文件路径名

c - fread 为什么以二进制模式读取以 ff fe 开头的文件返回 1

c - fread 和 fwrite 结果文件大小不同