在C中,您必须编写一个函数来为您执行此操作.你不能把结构放到磁盘上,因为b没有支持字符串就没有意义的指针.并且,除非您知道(并且可以控制)编译器如何打包其结构,否则最好使用实用程序函数,即使没有指针也是如此.
并且,好像这还不够,你应该输出字符串的长度,以便知道要读回多少字节.
你会找到类似的东西:
int better_than_blat (FILE *f, struct a *x) {
size_t len = strlen (x->b);
if (fwrite (&(x->a), sizeof(long), 1, f) != 1) return -1;
if (fwrite (&len, sizeof(size_t), 1, f) != 1) return -1;
if (fwrite (x->b, len, 1, f) != 1) return -1;
if (fwrite (&(x->c), sizeof(short), 1, f) != 1) return -1;
return 0;
}
int better_than_unblat (FILE *f, struct a *x) {
size_t len;
if (fread (&(x->a), sizeof(long), 1, f) != 1) return -1;
if (fread (&len, sizeof(size_t), 1, f) != 1) return -1;
x->b = malloc (len + 1);
if (x->b == NULL) return -1;
memset (x->b, 0, len + 1);
if (fread (x->b, len, 1, f) != 1) return -1;
if (fread (&(x->c), sizeof(short), 1, f) != 1) return -1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)