问题: 当结构体带有指针时,而他的内存是动态分配的,直接将其写入文件会将指针一起写入,导致同样的程序同样的条件运行两次输出的文件确有一点不同。
处理:写入文件前,将结构体指针备份后值为空,写入后在还原。我测试有时还是会不一样,可能是NULL不一定每次都一样。保险起见还是不要输出指针了,将结构体拆开输出,或者将指针设为一个固定的值。
int main(){
struct teste s1;
struct teste s2;
FILE *t1 = fopen("test1", "w");
FILE *t2 = fopen("test2", "w");
// 动态分配的内存会将指针存入文件,导致不一样
s1.c = (char *)malloc(10);
s2.c = (char *)malloc(10);
strcpy(s1.c,"hhh");
strcpy(s2.c,"hhh");
// 将指针设为NULL解决,指针指向数据需要另外存储
s1.c = s2.c = NULL;
// 将指针设为一个固定不变的值。
s1.c = s2.c = 0;
fwrite(&s1, sizeof(struct teste), 1, t1);
fwrite(&s2, sizeof(struct teste), 1, t2);
fclose(t1);
fclose(t2);
return 0;
}