2017-09-20 65 views
4

我有一个名为myfile.txt的文本文件,其内容为:为什么ftell会跳过文件中的某些位置?

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.为什么这样呢?请详细解释我,我想知道。

+0

请参阅相关问题https://stackoverflow.com/questions/10651108/why-does-ftell-shows-wrong-position-after-fread?rq=1 – Saustin

+0

您是否正在使用Windows? –

+0

@AjayBrahmakshatriya是的,我正在使用Windows。 –

回答

1

问题在于换行符,它在Windows中是\r\nDoes Windows carriage return \r\n consist of two characters or one character?)。

尝试改变这些:

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

这些:

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

其中b是二进制模式。

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

+0

非常感谢。它与“rb”合作。你能解释一下/ r/n如何影响我的程序? –

+0

@ChaitanyaVaishampayan更新。希望有所帮助! – gsamaras

+0

@axiac我错误地键入/ r/n。我的意思是\ r \ n。 –

相关问题