当数据量过大的时候,存在内存中就不是一个合理的方式,就可以选取写入文件来进行保存,读取数据。
以下是一个demo,用来记录学习的。保存一下!
ps:附加fopen的参数
#include#include #include typedef struct { char s[100]; int h; } st2; typedef struct { char c; char *str; char s[100]; int h; st2 k; } st; //写文件函数,将上面结构写入文件 int write() { FILE *fp; st sa, sb; char *str = "abcdefg"; sa.c = 'K'; sa.str = "abcdefg"; strcpy(sa.s, str); strcpy(sa.k.s, "fff"); sa.k.h = 20; sa.h = -3; fp = fopen("st.txt", "w+"); if (!fp) { printf("errror!n"); exit(-1); } printf("sa:c=%c,str=%s,s=%s,h= %d, k.s= %s, k.h= %dn", sa.c, sa.str, sa.s, sa.h, sa.k.s, sa.k.h); // printf("sizeof(sa)=%d:&c=%x,&str=%x,&s=%x,&h=%xn", sizeof(sa), &sa.c, &sa.str, &sa.s, &sa.h); fwrite(&sa, sizeof(sa), 1, fp); strcpy(sa.s, "hhjjj44433"); fwrite(&sa, sizeof(sa), 1, fp);//写两次,模拟写入多个结构体 //rewind(fp); //fread(&sb, sizeof(sb), 1, fp); //printf("sa:c=%c,str=%s,s=%s,h= %dn", sa.c, sa.str, sa.s, sa.h); fclose(fp); return 0; } //主函数,在主函数调用写文件,并读取文件中数据并打印查看信息 int main(void) { FILE *fp; st sb; write(); fp=fopen("st.txt","r"); if(!fp) { printf("errror!n"); exit(-1); } fread(&sb,sizeof(sb),1,fp); printf("read file sb:c=%c,str=%s,s=%s,h= %d, k.s= %s, k.h= %dn", sb.c, sb.str, sb.s, sb.h , sb.k.s, sb.k.h); fread(&sb,sizeof(sb),1,fp); printf("read file2 sb:c=%c,str=%s,s=%s,h= %d, k.s= %s, k.h= %dn", sb.c, sb.str, sb.s, sb.h , sb.k.s, sb.k.h); // printf("sizeof(sb)=%d:&c=%x,&str=%x,&s=%x,&h=%xn", sizeof(sb), &sb.c, &sb.str, &sb.s, &sb.h); fclose(fp); return 0; } #if 0 输出结果: sa:c=K,str=abcdefg,s=abcdefg,h= -3, k.s= fff, k.h= 20 //写文件处打印 read file sb:c=K,str=abcdefg,s=abcdefg,h= -3, k.s= fff, k.h= 20 //第一次读 read file2 sb:c=K,str=abcdefg,s=hhjjj44433,h= -3, k.s= fff, k.h= 20//第二次读
结论:
如果要用追加的方式写用”a+”方式打开文件;读取用“r”方式读取;ps:“a+”如果文件不存在会创建文件
#endif
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)