C语言中的一个程序,它读取二进制文件并以浮点表示法只输出零,而不输出文件内容

C语言中的一个程序,它读取二进制文件并以浮点表示法只输出零,而不输出文件内容,c,C,我对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仅浮动。我认为问题在于我没有正确地将文件中的值传递给数组。如有任何帮助或意见,我将不胜感激。我的代码如下 #include <st

我对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仅浮动。我认为问题在于我没有正确地将文件中的值传递给数组。如有任何帮助或意见,我将不胜感激。我的代码如下

#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]);
    }
}
#包括
#包括
int main(int argc,char*argv[])
{
文件*ifile;
int-cnt,i;
浮动*fptr;
fptr=malloc(cnt*sizeof(float));
ifile=fopen(argv[1],“rb”);
fread(fptr、sizeof(浮动)、cnt、ifile);
printf(“%f\n”,*fptr);
}
//有效的新代码
#包括
#包括
int main(int argc,char*argv[])
{
文件*ifile;
int-cnt,i;
浮动*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(浮动)、cnt、ifile);
对于(i=0;i
您没有在任何地方设置
cnt
,因此您读取的浮点数可能不正确,也可能不正确。如果我将其硬编码为
4
,并使用一个包含4个浮点数的二进制数据文件,则它可以正常工作:

#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]);
}

a<代码>fptr=malloc(cnt*sizeof(float))
fread(fptr、sizeof(float)、cnt、ifile)。。。
cnt
的值是?B不检查文件是否成功打开。我正在尝试使用malloc函数使用文件的第一个数字动态创建一个浮点数组。我不确定是否正确。
cnt
从未分配到任何位置,而是在malloc()和fread()中使用,因此运行您问题中的程序会导致未定义的行为。您如何知道文件的内容?你打印出来了吗?你读的是二进制文件,它是真的二进制文件还是ascii文件?这是一个赋值,给我们的值,但我看不到文件。我现在为“cnt”添加另一个fread语句,看看这是否解决了问题。
$ ./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