0

ファイルを作成するために使用しています(したがって、バイナリモードtmpfile()で自動的に開かれます)。次に、 で いくつか書き込みます。これらはすべて > 0 です。
floatsfwrite()floats

問題は、これらの値 (>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

問題は解決しました。キャストを強制するために一時変数を作成する必要がありました。

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

(フロート) がないと機能しません。理由がわかりません。助けてくれてありがとう ;)

于 2012-10-03T17:43:29.257 に答える
0

あなたがすべき:

  1. でアクセスしている値を出力して、out浮動小数点数とバイト数の両方でインデックス作成が機能していることを確認します。
  2. fwrite()失敗しないことを確認します。
  3. ファイルの内容を印刷します。
于 2012-10-03T07:12:16.690 に答える