我有这样的结构:
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/