2017-09-20 100 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。 –

相關問題