gpt4 book ai didi

c - 逐字节读取 pgm 文件会得到损坏的数据

转载 作者:行者123 更新时间:2023-11-30 17:12:07 25 4
gpt4 key购买 nike

    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。

而不是像这样读取图像 enter image description here

我是这样理解的

enter image description here

我该如何解决这个问题?

编辑:这是 pgm 的定义:

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

最佳答案

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

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

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

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

关于c - 逐字节读取 pgm 文件会得到损坏的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31797621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com