1.fread和fwrite函数的定义
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *fp);
size_t fread(const void *ptr, size_t size, size_t nmemb, FILE *fp); (1)ptr:缓冲区的首地址,对fread来说,它是读入数据的存放地址;对fwrite来说,是要输出数据的地址。 (2)size:要读写的字节数。 (3)nmemb:要进行读写多少个size字节的数据项。 (4)fp:文件结构指针。 (5)返回值是实际写入的nmemb数目。
2.一个例子
1 #include 2 3 struct Student 4 { 5 int id; 6 char name[20]; 7 }; 8 9 int main()10 {11 FILE *pRead, *pWrite;12 struct Student stu[3] = { { 1, "zhangsan"}, { 2, "lisi"}, { 3, "wangwu"}};13 14 //以二进制形式打开文件,用于写入15 pWrite = fopen("stu_bin.txt", "wb");16 if(NULL != pWrite)17 {18 int count = fwrite(stu, sizeof(struct Student), 3, pWrite);19 printf("Write %d students!\n", count);20 fclose(pWrite);//关闭文件指针,否则无法读取文件21 22 //以二进制形式打开文件,用于读取23 pRead = fopen("stu_bin.txt", "rb");24 if(NULL != pRead)25 {26 struct Student buf[3];27 struct Student *tmp = buf;28 29 while(!feof(pRead))30 {31 int i = fread(tmp, sizeof(struct Student), 1, pRead);32 printf("%d ", i);//应该依次输出1,1,1,033 tmp++;34 }35 36 int i = 0;37 printf("\n");38 for(; i < count; i++)39 {40 printf("%d\t%s\n", buf[i].id, buf[i].name);41 }42 43 fclose(pRead);44 }45 }46 47 return 0;48 }
输出结果: