2013-05-02 38 views
0

我試圖打開多個文件順序,使用fopen(),只是打印內容和計算字符。 在main()中,我使用不同的文件名稱調用兩次函數,但函數僅打印第一個文件兩次的內容。當然,這兩個文件都存在,只要調用此函數打印正確的內容;測試兩個文件。在多次調用該函數時似乎存在問題。函數使用fopen()保持打開相同的文件,即使給定不同的文件名作爲參數

有人可以給我一個提示嗎?什麼可能是錯的?

我的功能:

void open_and_read(char file_name[80]){  
    char c; 
    int buf_length = 16384; 
    char buf[buf_length]; 
    char* buf_pointer; 
    int i = 0; 
    FILE *file_pointer; 
    file_pointer = fopen(file_name,"r"); 
    buf_pointer = buf; 
    if(file_pointer==NULL){ 
     printf("Error: File %s not opened!", file_name); 
    } 
    else { 
     while(c!=EOF && i<(buf_length-1)){ 
      c = fgetc(file_pointer); 
      *buf_pointer = c; 
      buf_pointer++; 
      i++; 
     } 
     buf_pointer--; 
     *buf_pointer = 0; 
     printf("The file %s contains the follwing: \n%s", file_name, buf); 
     printf("char-count: %i\n", i); 
    } 
    if(fclose(file_pointer)!=0){ 
     printf("File was not closed!"); 
    } 
    else { 
     printf("File was successfully closed!"); 
    } 
} 

的main():

int main(){ 
    open_and_read("/home/x201/dev/IB/data/line1.dat"); 
    open_and_read("/home/x201/dev/IB/data/line2.dat"); 
+0

確定的第二個文件是不是空的? – fjardon 2013-05-02 11:20:44

+0

初始化char c,並將chage類型char轉換爲int。 – BLUEPIXY 2013-05-02 11:23:08

+0

您是否確認'file_name'在第二個fopen之前是預期的?你是否確認過來自'fopen'的返回碼在兩個調用中都不爲零? – wmorrison365 2013-05-02 11:23:36

回答

3
char c; 

這不是初始化的任何地方。嘗試char c = '\0'

編輯

這將是非常合適的,如果你要使用

while(((c = fgetc(file_pointer))!= EOF) && i<(buf_length-1)) 

不會有任何需要初始化c。在第一次進入循環之前,您將收到fgetc本身的值 。

+0

哦,夥計,這有幫助!非常感謝你!! :)我想爲什麼,雖然... – pxlbrnd 2013-05-02 11:28:44

+1

或while((c = fgetc(file_point))!= EOF)) – 2013-05-02 11:28:48

0

如果你的文件是空的,你的 「buf_pointer--;」將指向SOMETHING;

0

使用char c ='\ 0';

由於char c未初始化,因此auto變量會包含垃圾。

0

這裏的問題是char變量「c」。 這將是EOF第二次調用函數open_and_read時,它不會進入while循環,並且不會讀取並顯示前一個文件包含的第二個文件的包含。

解決方案是: -

焦炭C = '\ 0'

+0

哦,這很有道理!謝謝你的解釋! – pxlbrnd 2013-05-02 12:27:43

相關問題