如果我想处理一些巨大的数据,例如,搜索以查找其中的一个项目,也许我应该首先对这些数据进行排序然后再进行二分查找。但是下一次如果我想做同样的工作,我会再次对它进行排序,对于巨大的数据,这很痛苦,所以也许我应该将它们排序并存储在某个地方供以后使用。
C提供了一些读/写的库工具,我可以使用它们来操作/输出一个数组,但是如果我想存储一些其他有价值的数据结构,比如struct,链表甚至哈希表(再次,其中包含巨大的数据)或红黑树,如何将这些构造良好的数据写入文件并稍后将其读入我的程序?
这里有一个QA来处理 Java 中的这个问题,我想知道 C 中的答案。
答案 0 :(得分:1)
我认为您可以使用fwrite
和fread
,并使用二进制模式打开文件。示例如下
#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