在C中写入指向文件的指针

Ser*_*gey 6 c pointers file

我有一个结构:

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)


Rau*_*ait 0

您需要取消引用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)