2013-11-04 39 views
0

即時通訊編程的新手,我需要在第一階段在我的程序中顯示一個二進制文件。分段錯誤 - 打開二進制文件

我的老師的幫助下,我能做到這一點,但是當我在代碼工作到很晚我改變出頭,我不能回去,現在:(

這是代碼:

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    FILE *f; 
    int a = 0, b = 0, c = 0, d = 0; 
    float cinzentos = 0, mlinha = 0, ppixeis = 0; 
    unsigned char matriz[28][28][500]; 

    f = fopen("dados1.bin", "rb"); 

    if (f != NULL) { 
     while (!feof(f)) { 
      b++; 

      if (b == 28) { 
       printf(" soma: %f ", mlinha); 
       printf(" cizentos: %f ", mlinha/28); 
       printf("\n"); 
       b = 0; 
       a++; 
       mlinha = 0; 
       printf("%d %d %d", a, b, c); 
      } 

      if (a == 28) { 
       a = 0; 
       c++; 
       ppixeis = (ppixeis/28 * 28) * 0.1; 
       printf("media de pixeis: %f\n", ppixeis); 
       printf("\n---------------\n"); 
      } 

      matriz[a][b][c] = fgetc(f); 

      if (matriz[a][b][c] != 0) { 
       printf("1"); 
       mlinha = mlinha + matriz[a][b][c]; 
       ppixeis++; 
       fputc(matriz[a][b][c], p); 
      } else { 
       printf("0"); 
      } 
     } 
    } 

    fclose(f); 

    return 0; 
} 

我認爲,這是因爲該文件打開,但即時通訊在循環試圖把這個重新走到一起,需要幫助

+1

我會簡單地認爲這就是你想要訪問'與比數組較大的指數matriz' 。在每次訪問之前,請檢查'a','b'和'c'來查看它們是否具有很好的價值。 – Steve

+3

另外,學習並開始使用版本控制系統(如Git)。如果你經常檢查你的代碼,那麼做一個改變,打破你的程序,你可以回到一個工作版本,甚至執行工作版本和當前損壞的版本之間的區別,看*完全*有什麼不同。 – Steve

+2

此外,雖然(!feof())總是錯誤的,請參閱http://stackoverflow.com/questions/5431941/while-feof-file-is-always-wrong – SirDarius

回答

0

它看起來像你的代碼是關閉的一個

while (!feof(f)) { 
      b++; 

確保B就不會從0開始第一次讀取字符

相關問題