打开二进制文件并使用malloc创建数组的程序

时间:2015-12-06 21:31:29

标签: c arrays binary

这是原来的问题:

您将在C中编写一个程序,从a读取二进制数据 文件。文件中的第一个值是一个整数,表示浮点数 文件中剩余的值。其余数据是实际浮点值。您的 程序必须执行以下操作:

  1. 输入文件的名称将作为命令行传递到程序中 参数。
  2. 程序将打开此二进制文件,并读取文件中的第一个整数。它会 然后使用malloc函数动态创建这个大小的浮点数组。
  3. 程序将读取浮点值并将其存储到此中 新创建的阵列。
  4. 最后,程序将反向打印出该数组中的浮点值 订单,每行一个值。
  5. 程序的输出($。/ a.out data1或$ binread data1)应该给出

    4.400000 3.300000 2.200000 1.100000

    我一直在尝试执行此任务,但我无法打开提供的数据文件:

    http://tinyurl.com/zfwk3fu

    http://tinyurl.com/jx4ne72

    如果我试图打开它们,我就无法打开,或者我得到一个0的无限循环

    任何帮助将不胜感激!提前谢谢

    以下是我的代码:

    #include <stdio.h>
    #include <malloc.h>
    
    int main(int argc, char *argv[]){
       int i;
       if(argc < 2){
           printf("invalid arguments\n");
       }
       else{
           FILE *fp = fopen(argv[1], "rb");
           if(fp != NULL){
               int n;
               fscanf(fp, "%d", &n);
               float *arr = (float *)malloc(n * sizeof(float));
               for(i = 0; i < n; ++i){
                   fscanf(fp, " ,%f", arr + i);
               }
    
               for(i = n - 1; i >= 0; --i){
                   printf("%f\n", arr[i]);
               }
           }
           else{
               printf("Can not open %s\n", argv[1]);
           }
       }
    }
    

2 个答案:

答案 0 :(得分:0)

根据您提供的描述,该文件包含浮点值,而不包含任何其他内容。您似乎假设有额外的逗号...如果值只是用空格分隔,请使用此if (fscanf(fp, "%f", arr + i) == 1) { /* float value was parsed */ } else { /* could not parse a float: * either unexpected end of file or invalid input */ } 格式:

pymysql.err.OperationalError: (2006, "MySQL server has gone away..

答案 1 :(得分:0)

  

您将在C中编写一个程序,从文件中读取二进制数据。该   文件中的第一个值是一个表示数字的整数   文件中剩余的浮点值。剩下的数据是   实际浮点值。

由于您要编写一个读取二进制数据的程序,因此您无法使用fscanf(),这是 text < / strong>数据。要读取第一个整数读取浮点值并存储它们,您可以使用fread()。变化:

13c13
<            fscanf(fp, "%d", &n);
---
>            fread(&n, sizeof n, 1, fp);
15,17c15
<            for(i = 0; i < n; ++i){
<                fscanf(fp, " ,%f", arr + i);
<            }
---
>            n = fread(arr, sizeof *arr, n, fp);