大家下午好。 首先,我想为我的代码道歉 - 我是C的真正初学者。我的问题是 - 我给了ppm文件,我需要将值存储到数组中。我已经存储了颜色的高度,宽度和最大值,现在我存储值的想法将如图所示 - 乘以3,因为它是R G B格式。 谢谢你的帮助,请说明我是C的真正初学者。
#include <stdio.h>
int main(int argc, char** argv) {
int i = 0;
int j = 0;
FILE *fp;
fp = fopen(argv[1], "r");
printf(" %s ", argv[1]);
printf("\n");
int firstLine[2];
int width;
int next;
int enter;
int loop;
int height;
int max_color;
int pix[width][height];
int mask[3][3] = {// inicializting our given mask
{0, -1, 0},
{-1, 5, -1},
{0, -1, 0}
};
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
printf("%d ", mask[i][j]);
}
printf("\n");
}
fscanf(fp, "%s", &firstLine);
fscanf(fp, "%d", &height);
fscanf(fp, "%d", &width);
fscanf(fp, "%d", &max_color);
printf("%p", firstLine);
printf("\n");
printf("%d ", width);
printf("\n");
printf("%d", height);
printf("\n");
printf("%d", max_color);
printf("\n");
for (i = 0; i < width * 3; i++) {
for (j = 0; j < height * 3; j++) {
loop = fscanf(fp, "%d", &enter);
pix[i][j] = enter;
printf("%d ", enter);
}
}
// fclose(fp);
return (EXIT_SUCCESS);
}
答案 0 :(得分:1)
您无法定义未知大小的数组,esp高度和宽度未初始化。你应该在这里使用动态分配的数组,如下所示:
int ***pix;
pix = malloc(height * sizeof(int**));
for (i = 0; i < height; i++) {
pix[i] = malloc(width * sizeof(int**));
for (j = 0; j < width; j++) {
pix[i][j] = malloc(3 * sizeof(int));
}
}
要纠正解析二进制文件,您不能使用格式化输入,因为它们用于字符串。您可以改用fread,例如阅读宽度:
fread(&width, sizeof(int), 1, fp);
然后填充这个数组:
for (i = 0; i < height; i++) {
for (j = 0; j < width; j++) {
for (k = 0; k < 3; k++) {
fread(&enter, sizeof(int), 1, fp);
pix[i][j][k] = enter;
}
}
}
这只适用于你所说的关于ppm文件格式的内容当然是正确的。