0

tmpfile()用来创建一个文件(所以它会自动以二进制模式打开)。
然后我floatsfwrite(). 所有这些floats都> 0。

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

我写的值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);
}
4

2 回答 2

0

你应该:

  1. 打印出您在 中访问的值out,以验证索引是否正常工作,包括浮点数和字节数。
  2. 检查fwrite()没有失败。
  3. 打印文件的内容。
于 2012-10-03T07:12:16.690 回答
0

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

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

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

于 2012-10-03T17:43:29.257 回答