【发布时间】:2013-11-04 15:31:15
【问题描述】:
我是一个编程新手,我需要在第一阶段的程序中显示一个二进制文件。
在我老师的帮助下,我能够做到这一点,但是当我在代码中工作到后期时,我改变了一些我现在无法恢复的东西:(
这是代码:
#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,看看它们是否是好的值。 -
另外,学习并开始使用版本控制系统(如 Git)。如果您经常签入您的代码,然后进行的更改会破坏您的程序,您可以返回到工作版本,甚至执行工作版本和当前损坏版本之间的差异并准确地查看 有什么不同。
-
另外,虽然 (!feof()) 总是错误的,请参阅stackoverflow.com/questions/5431941/…
-
使用
for (a = 0; a < 28; a++) { for (b = 0; b < 28; b++) { for (c = 0; c < 500; c++) { int v; if ((v = getc(f)) == EOF) { ...break out of input loops on error, or exit... } matriz[a][b][c] = v; } } }会更方便。 -
这是关于 var c
标签: c file segmentation-fault