2014-05-23 128 views
0

我寫了從文件中讀取代碼,它具有以下含量的不同:此代碼 76 -1217454080 77 -1217458176 78 -1217462272讀取文件錯誤

FILE* fp; 
     if((fp = fopen("test" , "r")) < 0) 
      printf("ERROR in FILE \n") ; 
     int old_fp = fp ; 
     int shm , key ; 
     fp = fscanf(fp , " %d%d" , &key , &shm) ; 
     if(fp < 0) 
      printf("ERROR in fscanf \n "); 
     printf("%d , %d \n " , key , shm) ; 
     while(fp != EOF) 
     { 
      if(key == 5) 
       break ; 

      fp = fscanf(fp , "%d" , &key) ; 
      fp = fscanf(fp , "%d" , &shm) ; 
      printf("%d , %d\n" , key , shm) ; 
     } 

,但是當到達環路(進入循環)的程序給我segmentation fault,所以我已經試過ny這個代碼(這是使第一條語句同時讀取4個整數),它適用於同時讀取4個整數,但它再次進入循環時,它想要做的fscanf,程序崩潰!

FILE* fp; 
      if((fp = fopen("test" , "r")) < 0) 
       printf("ERROR in FILE \n") ; 
      int old_fp = fp ; 
      int shm , key ; 
        int ss , kk ; 
      fp = fscanf(fp , "%d%d%d%d" , &key , &shm,&ss,&kk) ; 
      printf("the result is %d %d " , ss , kk); 
      if(fp < 0) 
       printf("ERROR in fscanf \n "); 
      printf("%d , %d \n " , key , shm) ; 
      while(fp != EOF) 
      { 
       if(key == 5) 
        break ; 
    // it's crash here 
       fp = fscanf(fp , "%d" , &key) ; 
       fp = fscanf(fp , "%d" , &shm) ; 
       printf("%d , %d \n " , key , shm) ; 
      } 
+1

你似乎試圖在同一時間爲兩個完全不同的目的使用'fp' –

+2

你的代碼有很多問題。 fp是一個FILE指針,而不是一個整數。你用你擁有的第一個fscanf(實際上是所有這些)的返回來覆蓋fp。你在循環中獲得segfault,因爲fscanf試圖解引用fp,這並不指向有效的內存位置。這是一個糟糕的問題。 RTFM –

回答

6
fp = fscanf(fp , "%d" , &key); 

你毀了自己的FP! fscanf返回int,fp的類型爲FILE*