1
    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 文件的函数的一部分。在这里,在大约 2000 个字节之后,它读取的每个字节都是 0。

而不是像这样读取图像在此处输入图像描述

我这样理解

在此处输入图像描述

我该如何解决这个问题?

编辑:这是 pgm 的定义:

typedef struct PGM
{
    int width;
    int height;
    int maxValue;
    unsigned char data[500][500];
} PGM;
4

1 回答 1

1

如果您使用的是 Windows,则需要确保以二进制模式打开文件。否则,恰好值为 26 (0x1A) 的字节将被解释为文件结尾,之后将不再读取任何字节。(还会进行其他修改,会产生其他问题。)

在任何操作系统上,最好以二进制模式打开二进制文件,但在 Windows 上,这非常重要。

检查 fscanf 的返回值也很重要。

Fscanf 是一种糟糕的读取二进制文件的方法,不管它的价值如何。如果您的老师告诉您这样做,您可能想与他讨论良好的编程实践。

于 2015-08-03T23:54:47.413 回答