2013-11-04 20 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开始第一次读取字符

相关问题