我有一个结构:
typedef struct student {
char *name;
char *surname;
int age;
} Student;
Run Code Online (Sandbox Code Playgroud)
我需要将它写入二进制文件.
Student *s = malloc(sizeof(*s));
Run Code Online (Sandbox Code Playgroud)
我用数据填充我的结构,然后我写入文件:
fwrite(s, sizeof(*s), 1, fp);
Run Code Online (Sandbox Code Playgroud)
在我的文件中不存在姓名和姓氏,它有char*的地址.我如何写一个单词,而不是一个地址?
Wil*_*and 11
您需要取消引用指针并编写结构的各个部分.(你不应该直接编写一个结构,而是编码它的部分并编写它们:
Student *s = malloc(sizeof(*s));
s->name = "Jon";
s->surname = "Skeet";
s->age = 34;
// ....
fwrite(s->name, sizeof(char), strlen(s->name) + 1, fp);
fwrite(s->surname, sizeof(char), strlen(s->surname) + 1, fp);
//This one is a bit dangerous, but you get the idea.
fwrite(&(s->age), sizeof(s->age), 1, fp);
Run Code Online (Sandbox Code Playgroud)
您需要取消引用s并单独写出结构的每个元素,才能将内容实际写入文件:
size_t nameCount = strlen(s->name) + 1;
fwrite(s->name, sizeof(char), nameCount, fp);
size_t surnameCount = strlen(s->surname) + 1;
fwrite(s->surname, sizeof(char), surnameCount, fp);
Run Code Online (Sandbox Code Playgroud)