使用C中的fread读回数据后的值错误

时间:2012-10-03 06:56:32

标签: c fwrite fread

我正在使用tmpfile()创建一个文件(因此它会以二进制模式自动打开)。
然后我用floats在其中写了一些fwrite()。所有这些floats都是> 0

问题在于,当我尝试用fread()读取这些值(> 0)时,我得到负值!

我写的值是out[i][j][couche],这是正常的(由于它们的定义,它们不可能是<0)。问题出在最后(fread)。

void flou_bis (FILE * fp, PIXRVB **out, PIXRVB **in, int np, int nl, int rayon, int couche){
    int i,j,k,l,nb;
    float ret1, ret2;
    float rCouche;

    /* Other things not relevant..
    (process the values of array out[][][] ...)*/

    for (i=0; i<nl; i++)
    {
        for (j=0; j<np; j++)
        {
            fwrite ( &(out[i][j][couche]) , sizeof(float), 1, fp);
        }
    }

    rewind(fp);
    /*fsync(fp); // Useless
    rewind(fp);*/

    printf("%d float read\n", fread ( &ret2, sizeof(float), 1, fp)); /*Here is the problem!!! */
    printf("%f\n", ret2);
}

2 个答案:

答案 0 :(得分:0)

你应该:

  1. 打印出您在out中访问的值,以验证索引是否正常工作,包括浮点数和字节数。
  2. 检查fwrite()是否失败。
  3. 打印文件内容。

答案 1 :(得分:0)

问题解决了,我需要创建一个临时变量来强制转换:

float ent = (float) out[i][j][couche];
fwrite ( &ent, sizeof(float), 1, fp);

没有(浮动)它不起作用,我不知道为什么 谢谢大家的帮助;)