我正在解析.ppm
文件,使用fgetc
一次读取一个字节,然后通过除以255.0将它们转换为浮点数,以获得用于OpenGL代码的颜色。这很简单。我使用printf("%f %f %f\n", color[0], color[1], color[2]);
打印出数字以进行调试。大多数时候这种方法效果很好(见第一行),但偶尔会打印出额外的垃圾(见第二行)。
0.086275 0.031373 0.000000
0.133333 0.000000 0.00<BA><B9>9?<D1><D0><D0>=<99><98>^X>3 0.078431 0.000000
为什么会出现这种情况?
更新:
float *read_eight_bit(FILE *file, int rows, int cols)
{
float *data = (float *)malloc(rows*cols*3*sizeof(float));
int c;
int i, j, k;
for(i = 0; i < rows; i++) {
for(j = 0; j < cols; j++) {
for(k = 0; k < 3; k++) {
if((c = fgetc(file)) != EOF) {
data[get_index(i, j, k, rows, cols)] = c/255.0f;
}
else {
perror("reached unexpected EOF");
free(data);
return NULL;
}
}
return data;
}
这是读取内容的实际代码。
答案 0 :(得分:1)
在没有看到更多代码的情况下,我能想到的唯一解释是堆栈以某种方式混乱,可能是通过缓冲区溢出或欠载(在数组外部写入)。
我建议您通过cppcheck运行代码,因为它可以检测到许多这类问题。