|

楼主 |
发表于 2022-2-19 10:55:57
|
显示全部楼层
- #include<stdio.h>
- #include<string.h>
- #include <stdlib.h>
- // 将以下结构体类型变量,以二进制的形式存放到文件中,并且可以实现读的接口,打印读出来信息。
- typedef struct Student
- {
- char *name; //名字
- int id;
- int name_len; //名字长度
- }Stu;
- int main()
- {
- Stu s; //定义结构体变量
- //结构体成员赋值
- s.id = 1;
- s.name_len = strlen("mike"); //名字长度
- s.name = (char *)malloc(s.name_len + 1);
- strcpy(s.name, "mike");
-
- FILE *ff=fopen("信息.txt","w");
- if(!ff)
- {
- perror("2");
- return -1;
- }
- printf("%s %d %d",s.name,s.id,s.name_len);
- int num=fwrite(&s,1,sizeof(Stu),ff);//只把结构体里的char *name字符串指针变量写入文件,没有把字符串写入文件,应该在后面把name指向的字符串写入文件
- printf("共存入%d个字节!",num);
- num=fwrite(s.name,1,s.name_len + 1,ff);//读取时别忘了读完一个结构体在读入一个字符串
- printf("共存入%d个字节!",num);
-
- fclose(ff);
- ff=fopen("信息.txt","r");
- if(!ff)
- {
- perror("1");
- return -1;
- }
- Stu ss;
- free(s.name);
- ss.name=NULL;
- ss.name=(char *)malloc(64);
- if(ss.name==NULL) return 1;
- int nuu=fread(&ss,1,sizeof(Stu),ff);
- printf("共%d个字节!",nuu);
- nuu=fread(ss.name,1,ss.name_len+1,ff);
- printf("共%d个字节!",nuu);
- printf("%s %d %d",ss.name,ss.id,ss.name_len);
-
-
-
- free(ss.name);
- return 0;
- }
复制代码
假如我改成这样先释放掉free(s.name),然后重新开辟ss.name ,这里运行调试至free(ss.name)还是会崩 |
|