c - 如何从C中的动态数组中的二进制文件读取数据

标签 c arrays dynamic data-structures binaryfiles

在下面的代码中,我尝试从二进制文件读取数据并将其写入动态数组。
函数“getAnz”应该给我数据集的数量。
在函数“readRecs”中,我想从二进制文件中读取数据并将其写入动态数组(zArr)。
该程序为我提供了正确数量的数据集。是的。

现在我有几个问题:
1. 我读取数据并将其写入动态数组的方式有什么问题?
2. 如何将“zArr”从main函数传递到readRecs函数?
3.是否有另一种更简单的方法来获取文件中的数据集数量?
感谢您的帮助。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct daten
{
    char name[20];
    int alter;
};

long getAnz(FILE *fp)
{
    struct daten ptr;
    long counter = 0;

    while(fread(&ptr, sizeof(struct daten), 1, fp))
    {
        counter++;
    }

    fclose(fp);

    return counter;
}

void foo(FILE *fp, struct daten *zArr[], long lAnz)
{
    long i = 0;

    for(i = 0;i < lAnz;i++)
    {
        if(i == 0)
        {
             zArr = malloc(sizeof(*zArr));
        }
        else
        {
            zArr = realloc(zArr,sizeof(*zArr)*(i+1));
        }   
    }

    fclose(fp);
}

int main(void)
{
    struct daten *zArr;
    long anz = 0, i = 0;

    FILE *fp = fopen("daten.bin", "rb");
    anz = getAnz(fp);
    printf("%ld\n", anz);
    foo(fp, &zArr, anz);

    for(i = 0; i<anz; i++)
    {
        printf("%s\t", zArr[i].name);
        printf("%d\n", zArr[i].alter);
    }

    return 0;
}

最佳答案

除其他问题外,您还通过值将指针 zArr 传递给 void foo(FILE *fp, struct daten *zArr[], long lAnz) 所以它的变化是范围在函数内。如果您希望 foo 返回后保留更改,请尝试 void foo(FILE *fp, struct daten * &zArr, long lAnz)

关于c - 如何从C中的动态数组中的二进制文件读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14317215/

相关文章:

c - 如何判断一棵完全二叉树是否值平衡

java - 既不是句法也不是语义的错误?

c - makefile中 "include"和 "-include"的区别

c - 循环打印数组内容时程序挂起

javascript - Eloquent javascript 第 4 章数组

c - Visual C++ 2015/GL(全程序优化)和/OPT :REF (optimize references) prevent static initializers being called

php - 使用 HTTPful 请求 JSON 数据时如何获取数组而不是对象

jquery - 使用 Angular + JQuery 实现动态 Pinterest 风格的布局

c# - 将 Func 转换为委托(delegate)

c - 自定义 malloc() 中的无限循环