c - 将两个数组附加到一个二进制文件中

标签 c

我有两个数组,我想将它们都写入(实际上是追加)到一个二进制文件中,以便得到结果 1,2,3,4,5,6,7,8,9, 10。我的以下代码只执行第一部分,但不附加第二部分:

FILE *fp;
int sum1[5]={1,2,3,4,5};
int sum2[10]={6,7,8,9,10};
int sum[10]={0};
int i;

// Write the first array sum1
fp = fopen("test.bin","wb");
fwrite(sum1, sizeof(int), 5, fp);
fclose(fp);

// Write (append) the second array sum2 at the end of test.bin file
fp = fopen("test.bin","rb");
fseek(fp, 5, SEEK_SET);
fwrite(sum2, sizeof(int), 5, fp);
fclose(fp);

// Show the result if both sum1 and sum2 are merged.
fp = fopen("test.bin","rb");
fread(sum, sizeof(int), 10, fp);

for ( i = 0; i < 10; ++i) {
    printf("%d, ", sum[i]);
}
printf("\n");
fclose(fp);

结果是 1, 2, 3, 4, 5, 0, 0, 0, 0, 0,。这不是我想要的。如何修改代码以反射(reflect)我的需要?谢谢

最佳答案

这个:

fp = fopen("test.bin","rb");

不打开“test.bin”写,r代表“读”。

你应该使用:

fp = fopen("test.bin","ab");

这里,a 表示“追加”。无需查找末尾,追加意味着您只能进行追加,因此所有写入都将位于文件末尾。

您还应该对 I/O 函数进行错误检查。

关于c - 将两个数组附加到一个二进制文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44625500/

相关文章:

c - ANSI C 我在 fwrite 和 fread 上做错了什么?

使用 libnl 更改网桥标志

c - 如何指定一个目录为包含头文件的目录

c++ - 如何在我的 DLL 中调用我的 exe 中定义的函数?

c - 如何模拟对任何当前聚焦的窗口的按键操作?

c - 你如何分析你的代码?

c - 高效的堆管理器,用于大量流失、微小的分配?

c - 将 Rust staticlib 与 C 链接后出现段错误

c - 数字浮点误差的上限

c - 为什么缓冲区位于 main() 本地,然后无法显式关闭流是一个错误?