0

ファイルからデータを読み込もうとしていますが、混乱しています。このファイルには、3列のデータが含まれています。fscanfを使用すると、正しい値が得られます。

FILE* fp = fopen("test.txt");
double buffer[3];
fscanf(fp,"%lf %lf %lf",&buffer[0],&buffer[1],&buffer[2]);

今、私は_readを使用して同じ値のセットを読み取ろうとしています。これは私にすべての間違った値を与えます。

int fh;
char buffer[50];
_sopen_s( &fh,CStringA(PointFile),_O_RDONLY|_O_BINARY,_SH_DENYNO,0);
_read(fh,buffer,sizeof(double)*3);

誰かが私が間違っていることを教えてくれると本当に助かります。

4

1 に答える 1

1

最初のコード スニペットは、 のテキスト表現を読み取っdoubleて変換します。それ*scanfが関数ファミリーの機能です。

有効な入力例:

1.0 2.7182818 3.14159265358

2 番目のコード スニペットは、解析や変換を行わずに、ファイルから数バイト (おそらく 24 バイト) を読み取ります。バッファーから double を抽出する方法を示していません。(最初の値を取得する) のようなもの*(double *)bufferが期待され、ファイルに 3 つのプラットフォーム固有の double の「ダンプ」があり、適切なfwriteまたは_write

有効な入力の例 (16 進ダンプ、64 ビット IEEE 浮動小数点を想定):

00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00

(POSIX 読み取りを使用している場合は、短い読み取りの可能性に関する警告が表示されます。ただし、 Microsoft CRT_readをお_s_open勧めします。ファイルの終わりに到達しない限り、バイナリ モードでは短い読み取りは行われません)。

于 2013-01-14T20:42:25.927 に答える