0

我正在尝试从文件中读取数据并且很困惑。该文件包含三列数据。使用 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

第一个代码片段读取doubles 的文本表示并对其进行转换。这就是*scanf函数族的作用。

有效输入示例:

1.0 2.7182818 3.14159265358

第二个代码片段从文件中读取一些(可能是 24 个)字节,而不进行解析或转换。您没有展示如何从缓冲区中提取双打。如果*(double *)buffer您的文件中有 3 个特定于平台的双精度的“转储”,使用适当的创建fwrite_write

有效输入示例(十六进制转储,假设 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 读取,这里将警告短读取的可能性。但是,_read建议_s_open使用 Microsoft CRT,除非到达文件末尾,否则它不会在二进制模式下进行短读取)。

于 2013-01-14T20:42:25.927 回答