0

Windows で C のファイルに値を書き込むと、間違っているように見えるものが得られ、その結果は Cygwin で実行された同じプログラムとは異なります。

この場合、float をファイルに書き込んでいます。

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <io.h>

int         main( void )
{
    int     fd;
    float   f;

    fd = open("file.a", O_RDWR | O_CREAT);
    f = (float)atof("-0.1352237");
    printf("%.7f\n", f);

    write(fd, (void *)&f, sizeof(float));
    close(fd);
    printf("sizeof(float): %d\n", sizeof(float));

    return (EXIT_SUCCESS);
}

このファイルを Windows と Cygwin (インクルードなし) の両方でコンパイルして実行しましたが、同じ結果が得られません。私はフロートを書いているので、出力ファイルには4バイトが書き込まれると予想されます

ただし、コマンド ラインで cl.exe を使用してコンパイルした場合の出力は間違っているようです。

1578 0d0a be

ファイルからフロートに読み取ると、明らかに正しい値が得られません。また、ファイルに書き込まれるバイト数が間違っているため、5 バイトではなく 4 バイトにする必要があります。

これは、Cygwin で実行したときに得られるものです。

1578 0abe 

正解です。これをファイルから float に読み込むと、正しい値 (-0.1352237) が得られます。

ここで何か不足していますか?これらの機能の Windows 実装には欠陥がありますか? それとも、データを正しく書き込んでいないのでしょうか?

4

1 に答える 1

2

ファイルをテキスト モード (デフォルト) で開いたので、0a( ) は( "\n") に変換されます。0d0a"\r\n"

O_BINARYフラグを使用して、ファイルをバイナリ モードで開く必要があります。

于 2012-06-09T19:05:44.617 に答える