关于带指针的结构体写入文件的有关问题

关于带指针的结构体写入文件的问题.
例如一个struct student  
  {  
  int number;  
  char sex;  
  char *name;  
  }  
  如果直接将这个结构体写入的话,例如用 fwrite(&student[i],sizeof(struct student),1,fp)的话,那么其name一项写入的将是其地址,而不是其指向的值;我的思考是先fwrite(&student[i],sizeof(struct student),1,fp);然后在把name的长度写入,再依次写入name的内容;不知道大家有没有更好的办法(因为面对的如果是结构体嵌套着结构体的话,这样实现起来会很烦的),还望大家指教啊,谢谢啊。 

有没有比如,write(&student[i],size)能把name 指向的数据也写入的方式呢? 因为我定义了很多带指针的结构体,所以如果对char *name都单独写入的会很麻烦.

------解决方案--------------------
fstream file;
file.write((char *)&student[i],sizeof(struct student));
对name操作的时候别忘记了加\0.

试试,看行不行


------解决方案--------------------
不使用char *,使用char a[10]这样的数组形式。
------解决方案--------------------
这个问题应该是数据结构的问题。

如果只有一个指针的话可以这样定义:
struct student
{
int size;
int number;
char sex;
char name;
}

从name字节开始,向后存储字符串。
size 是全部数据的长度,包括name字符串。

使用的时候:
char * pname = &student.name; 


如果有好多指针的话,这样定义:
struct student
{
int size;
int number;
char sex;
int offsetName1;
int offsetName2;
}

在结构的后面紧跟Name1和Name2字符串。
offsetName1 是Name1相对于结构起点的偏移量。
offsetName2 是Name2相对于结构起点的偏移量。
size 是全部数据的长度,包括Name1和Name2字符串。

使用的时候:
char * pname1 = &student + student.offsetName1;

可以参考MFC中的结构定义。

要注意的是对齐方式的问题,默认的对齐方式是4字节,也就是说,在结构中,char类型占4个字节。实际应用中可能会有些问题。






------解决方案--------------------
可以用stl
------解决方案--------------------
没有这种用法的
楼住这么写是不可以的
即使用也是用char的数据而不是char的指针类型
这个和结构体对其没有什么关系
对齐的问题一直存在, 不可能因为往文件中写 就不对齐

char* 是个指针变量, 他在结构体中指在4个字节,
你往文件中写, 也只是些指针的值,也就是字符串的首地址。
使用stl也是不可以的 
stl自己管理内存, 你往文件中写的也是stl在栈中的地址,虽然他是个变量。
编译器还没有聪明到能够自己读取stl中的内容。

所以还是用数组的方式
struct student
{
int number;
char sex;
char name[8]; // 注意这个可以没有结束符'\0',因为结构体长度固定
}

在四字节对齐的方式 上述结构体占3*sizeof(int) + 1 个字节
------解决方案--------------------
你可以将节点中的元素信息分别fwrite.当然你必须知道指针所指内容的宽度。