如何将数据结构写入文件供以后使用?

时间:2013-12-27 03:35:57

标签: c

如果我想处理一些巨大的数据,例如,搜索以查找其中的一个项目,也许我应该首先对这些数据进行排序然后再进行二分查找。但是下一次如果我想做同样的工作,我会再次对它进行排序,对于巨大的数据,这很痛苦,所以也许我应该将它们排序并存储在某个地方供以后使用。

C提供了一些读/写的库工具,我可以使用它们来操作/输出一个数组,但是如果我想存储一些其他有价值的数据结构,比如struct,链表甚至哈希表(再次,其中包含巨大的数据)或红黑树,如何将这些构造良好的数据写入文件并稍后将其读入我的程序?

这里有一个QA来处理 Java 中的这个问题,我想知道 C 中的答案。

1 个答案:

答案 0 :(得分:1)

我认为您可以使用fwritefread,并使用二进制模式打开文件。示例如下

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

int cmp(const void *a, const void *b)
{
    return *(int *)a - *(int *)b;
}

int main()
{
    FILE *fin, *fout;
    int a[] = {1, 3, -1, 4, 19, 21, 17, 2, 10};
    int i, n = sizeof(a) / sizeof(*a);
    int *b = (int *)malloc(n * sizeof(int));

    qsort(a, n, sizeof(int), cmp);

    for (i = 0; i < n; ++i) {
        printf("%3d", a[i]);
    }
    printf("\n");

    fout = fopen("data.dat", "wb");
    fwrite(a, sizeof(a), n, fout);
    fclose(fout);

    fin = fopen("data.dat", "rb");
    fread(b, sizeof(int), n, fin);
    fclose(fin);

    for (i = 0; i < n; ++i) {
        printf("%3d", b[i]);
    }
    printf("\n");

    free(b);
    return 0;
}

//  -1  1  2  3  4 10 17 19 21
//  -1  1  2  3  4 10 17 19 21