代码之家  ›  专栏  ›  技术社区  ›  Chaitanya Vaishampayan

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

  •  4
  • Chaitanya Vaishampayan  · 技术社区  · 7 年前

    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      
    

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   gsamaras a Data Head    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上有所不同,其中文本模式将两个字符的回车、换行序列映射到单个新行字符。注意:Linux上不需要映射。