我正在使用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);
}
答案 0 :(得分:0)
你应该:
out
中访问的值,以验证索引是否正常工作,包括浮点数和字节数。fwrite()
是否失败。答案 1 :(得分:0)
问题解决了,我需要创建一个临时变量来强制转换:
float ent = (float) out[i][j][couche];
fwrite ( &ent, sizeof(float), 1, fp);
没有(浮动)它不起作用,我不知道为什么 谢谢大家的帮助;)