int i, j;
for (i = (*pgm).height - 1; i >= 0; i--)
for (j = 0; j < (*pgm).width; j++)
{
fscanf(file, "%c", &(*pgm).data[i][j]);
}
}
这是我逐字节读取PGM文件的函数的一部分。 在这个for中,在2000字节之后,它读取的每个字节都是0。
那样阅读图像我是这样的
我该如何解决这个问题?
编辑:这是pgm的定义:
typedef struct PGM
{
int width;
int height;
int maxValue;
unsigned char data[500][500];
} PGM;
答案 0 :(得分:0)
如果您使用的是Windows,则需要确保以二进制模式打开文件。否则,碰巧具有值26(0x1A)的字节将被解释为文件的结尾,之后将不再读取其他字节。 (还将进行其他修改,这将产生其他问题。)
在任何操作系统上,最好以二进制模式打开二进制文件,但在Windows上它非常重要。
检查fscanf的返回值也很重要。
Fscanf是一种阅读二进制文件的可怕方式,因为它的价值。如果您的老师告诉您这样做,您可能希望与他讨论良好的编程实践。