gpt4 book ai didi

c - C 程序读取二进制文件并仅输出 float 形式的零而不是文件内容

转载 作者:行者123 更新时间:2023-11-30 14:52:19 24 4
gpt4 key购买 nike

我不太熟悉 C 语言或真正编写代码。我正在尝试读取二进制文件并将其输出到屏幕。我使用 fread 和 fopen 因为它们与二进制文件配合得很好。我有这段可以编译的代码,但是当我将代码运行为 ./a.out data1 时,我只得到 0.0000。文件内容为4、1.1、2.2、3.3、4.4。这就是应该输出的内容。 1.1000 2.2000 3.3000 4.40000 仅 float 。我怀疑问题是我没有将文件中的值正确传递到数组。我将不胜感激任何帮助或意见。我的代码如下。

#include <stdio.h>
#include <malloc.h>

int main (int argc, char *argv[])
{
FILE *ifile;
int cnt, i;
float *fptr;
fptr = malloc (cnt * sizeof (float));
ifile = fopen (argv[1], "rb");
fread (fptr, sizeof (float), cnt, ifile);
printf ("%f\n", *fptr);
}

// new code that works
#include <stdio.h>
#include <malloc.h>

int main (int argc, char *argv[])
{
FILE *ifile;
int cnt, i;
float *fptr;
ifile = fopen (argv[1], "rb");
if (fread (&cnt, sizeof (int), 1, ifile) != 1) {
printf ("%d\n", cnt);
}
fptr = malloc (cnt * sizeof (float));
fread (fptr, sizeof (float), cnt, ifile);
for (i = 0; i < cnt; i++) {
printf ("%f\n", *fptr[i]);
}
}

最佳答案

您没有在任何地方设置cnt,因此您读取了未指定数量的 float ,这可能正确也可能不正确。如果我将其硬编码为 4 并使用其中包含 4 个 float 的二进制数据文件,则它可以正常工作:

#include <stdio.h>
#include <malloc.h>
int main (int argc, char *argv[]){
FILE *ifile;
int cnt = 4, i;
float *fptr;
fptr= malloc(cnt*sizeof(float));
ifile=fopen(argv[1], "rb");
fread(fptr, sizeof(float), cnt, ifile);
printf("%f\n", *fptr);
printf("%f\n", fptr[1]);
printf("%f\n", fptr[2]);
printf("%f\n", fptr[3]);
}

运行程序:

$ ./test-prog data
1.100000
2.200000
3.300000
4.400000
$ hd data
00000000 cd cc 8c 3f cd cc 0c 40 33 33 53 40 cd cc 8c 40 |...?...@33S@...@|
00000010

关于c - C 程序读取二进制文件并仅输出 float 形式的零而不是文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47665804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com