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;
}
我认为,这是因为该文件打开,但即时通讯在循环试图把这个重新走到一起,需要帮助
我会简单地认为这就是你想要访问'与比数组较大的指数matriz' 。在每次访问之前,请检查'a','b'和'c'来查看它们是否具有很好的价值。 – Steve
另外,学习并开始使用版本控制系统(如Git)。如果你经常检查你的代码,那么做一个改变,打破你的程序,你可以回到一个工作版本,甚至执行工作版本和当前损坏的版本之间的区别,看*完全*有什么不同。 – Steve
此外,虽然(!feof())总是错误的,请参阅http://stackoverflow.com/questions/5431941/while-feof-file-is-always-wrong – SirDarius