c - 保存部分结构

标签 c

我有这样的结构:

struct DATOS{
  short dato1;
  float dato2;
};

DATOS dat1;
dat1.dato1 = 123;

FILE *archivo;
archivo = fopen("archivo.bin","wb");
fwrite(&dat1,sizeof(DATOS),1,archivo);
fclose(archivo);

很好,但是如果我想在另一个值之后输入,我该怎么做?

dat1.dato2 = 4.2536;

archivo = fopen("archivo.bin","ab");
fwrite(&dat1.dato2,sizeof(float),1,archivo); ????
fclose(archivo);

谢谢。

最佳答案

如您的伪代码所写,第一个 fwrite() 会将整个结构的副本写入文件,此时 dato2 是垃圾。

您稍后的 fwrite() 会将 dato2 的副本附加到文件中。因此,在文件中它看起来像这样:

struct DATOS(带有 dato2 的垃圾)
float

如果你想稍后用实际数据覆盖垃圾 dato2,那么你应该这样做:

archivo = fopen("archivo.bin", "r+b");
fseek(archivo, (long) ((char*) &dat1.dato2 - (char*) &dat1), SEEK_SET);
fwrite(&dat1.dato2, sizeof(dat1.dato2), 1, archivo);
fclose(archivo);

关于c - 保存部分结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28678032/

相关文章:

c - 在 Swift 中释放 C-malloc() 的内存?

c - 如何将函数和变量参数列表传递给 C 中的另一个函数?

c - 线程和同步

c - opendir() 系统调用后指向 char 的指针发生变化

c - scanf(...) 和 fgets(...) 问题

c - 在两个不同大小的数组中查找公共(public)元素

c - Strcpy() 复制指针?

c - 打印二维数组的内容(指针的指针)

使用 ns_initparse() 函数编译程序 C linux

c - 如何将 Glade 小部件存储在变量中?