为什么 ftell 会跳过文件中的某些位置?

Why does ftell skips some positions in the file?

我有一个名为 myfile.txt 的文本文件,内容为:

line 1
l

我的代码:

#include<stdio.h>
int main(){
    FILE *f = fopen("myfile.txt","r");
    if(f==NULL){
        FILE *fp=fopen("myfile.txt","w");
        fclose(fp);
        f = fopen("myfile.txt","r");
    }
    while(!feof(f)){
        printf("\ncharacter number %d    ",ftell(f));
        putchar(fgetc(f));      
    }
    fclose(f);
    return 0;
}

输出为:

character number 0    l
character number 1    i
character number 2    n
character number 3    e
character number 4
character number 5    1
character number 6

character number 8    l
character number 9      

每当遇到 \n 时,ftell 都会跳过一个值,例如它已经跳过了值 7。为什么会这样?请详细解释我,我想知道。

问题出在换行符上,在Windows中是\r\n(Does Windows carriage return \r\n consist of two characters or one character?).

尝试更改这些:

fopen("myfile.txt","r");

这些:

fopen("myfile.txt","rb");

其中 b 用于二进制模式。

二进制模式在 Windows 上有所不同,其中文本模式将两个字符回车 return、换行序列映射到单个换行符。注意:Linux.

不需要映射