您的位置:首页 > 运维架构

fopen、fwrite、fread 函数——读写结构体类型数据详解

2017-04-16 23:02 369 查看

问题引入

几个概念需要了解

文件读写过程:打开、读、写、关闭

结构体类型,也是一种类型,用简单数据类型的思维去考虑复杂类型

fopen()函数

函数原型:

FILE *fopen(const char *path, const char *mode)


使用注意:需要判断产生的文件指针是不是空指针

fwrite()函数

函数原型:

size_t fwrite(const void * ptr, size_t size, size_t nmemb, FILE * stream);


函数说明:fwrite()用来将数据写入文件流中. 参数stream 为已打开的文件指针, 参数ptr 指向欲写入的数据地址, 总共写入的字符数以参数size*nmemb 来决定. Fwrite()会返回实际写入的nmemb 数目.

使用注意:prt指针当前指向的位置

fread()函数

函数原型:

size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream);


实例解析

//写入两个学生数据到结构体stua
//存入到结构体stub并读出

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

#define N  5
#define SIZE (sizeof(struct stu))
#define PATH "demo.txt"

typedef struct stu{
char name
;
int age;
}STU;

int main (void) {
STU stua[2], stub[2],*pa=stua, *pb=stub;

printf("Write File:\n");
for (int i=0; i<2; i++, pa++) {
scanf("\t%s%d", pa->name, &pa->age);
}
FILE *fp;
if ( (fp=fopen(PATH, "wb+")) == NULL ) {
printf("Cannot open file\n");
getch();
exit(1);
}

pa = stua;
fwrite(pa, SIZE, 2, fp);
rewind(fp);
fread(pb, SIZE, 2, fp);

printf("\nRead File:\n");
for (int j=0; j<2; j++, pb++) {
printf("\t%5s %2d\n", pb->name, pb->age);
}

fclose(fp);
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐