http://zhidao.baidu.com/question/31855139.html
写入文件... #include<stdio.h> #include<string.h> #define nmemb 3 struct test { char *name; int size; }s[nmemb]; void main() { FILE * stream; s[0].name="a"; s[0].size=strlen(s[0].name); s[1].name="b"; s[1].size=strlen(s[1].name); s[2].name="c"; s[2].size=strlen(s[2].name); stream=fopen("aaa","w"); fwrite(s,sizeof(struct test),nmemb,stream); fclose(stream); } 读取文件. #include<stdio.h> #include<string.h> #define nmemb 3 struct test { char *name; int size; }s[nmemb]; void main() { FILE * stream; stream = fopen("aaa","r"); for(int i=0;i<nmemb;i++) { fread(&s[i],nmemb,sizeof(struct test),stream); } fclose(stream); for(i=0;i<nmemb;i++) printf("name[%d]=%-20s:size[%d]=%d\n",i,s[i].name,i,s[i].size); fclose(stream); } 为什么只能读取size而读不到 字符串啊...头都大了.读字符串就是乱七八糟的东西 点都不听话...我有更好的答案
提问者采纳
2007-07-29 15:54
写入文件中: 共写入三次,每次写入一个结构体的是8个字节,前4个字节是指针地址,后4个字节是一个int数据. 读文件件中: //以下这一段有错误, for(int i=0;i<nmemb;i++) { fread(&s[i],nmemb,sizeof(struct test),stream); } //以上这段有错误. 估计你是想分三次读出,那么应该是 for(int i=0;i<nmemb;i++) { fread(&s[i],sizeof(struct test),1,stream); } 这样是读三次,每次读出一个结构体的数据8个字节,前4个为一个指针,后4个为一个int型数据 不过这样修改后仍然读不出期望的数据 (如果把读写文件合写为一个可以显示读出正确数据的假象) 这是因为,你存储的指针指向的地址是内存,而内存的数据是变化的,因此读不出期望的数据是很正常的.读出了正常的数据那可能是你的内存还没有被覆盖掉,这是假象,并不是程序正确. 可以把结构体中的char *name;修改为char name[20]; 把写入文件中s[0].name="a";这样的赋值语句修改为: strcpy(s[0].name,"a");