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

ezz*_*rem 5 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;
}
Run Code Online (Sandbox Code Playgroud)

我得到的是输出:

cur before=0
cur after reading 1000 bytes =1007
Run Code Online (Sandbox Code Playgroud)

这是正常的吗?fread返回数字'1000',但光标(用ftell())显示1007,任何帮助将不胜感激.

Let*_*_Be 10

这很正常.

'\n' 可以用两个字符表示,所以你得到的是歪斜.

如果您不希望发生这种情况,请以二进制模式打开最后一个.


das*_*ght 5

来自以下文件ftell:

或二进制流,返回的值对应于文件开头的字节数.对于文本流,不保证该值是文件开头的确切字节数,但返回的值仍可用于使用fseek将位置指示器恢复到此位置.

所以是的,这是正常的.