C语言数据块读写函数:fread和fwrite

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);

  • ptr:缓冲区的首地址,对fread来说,它是读入数据的存放地址;对fwrite来说,是要输出数据的地址。
  • size:要读写的字节数。
  • nmemb:要进行读写多少个size字节的数据项。
  • fp:文件结构指针。
  • 返回值是实际写入的nmemb数目。

2、实例一枚

#include <stdio.h>

struct Student
{
int id;
char name[20];
};

int main(int argc, const char * argv[])
{
FILE *pRead, *pWrite;
struct Student stu[3] = {
{1, "zhangsan"},
{2, "lisi"},
{3, "wangwu"}
};

// 以二进制形式打开文件,用于写入
pWrite = fopen("stu_bin.txt", "wb");
if(NULL != pWrite)
{
int count = fwrite(stu, sizeof(struct Student), 3, pWrite);
printf("Write %d students!\n", count); // 输出:Write 3 students!
fclose(pWrite); // 关闭文件指针,否则无法读取文件

// 以二进制形式打开文件,用于读取
pRead = fopen("stu_bin.txt", "rb");
if(NULL != pRead)
{
struct Student buf[3];
struct Student *tmp = buf;

while(!feof(pRead))
{
int i = fread(tmp, sizeof(struct Student), 1, pRead);
printf("%d ", i); // 输出:1,1,1,0
tmp++;
}

int i = 0;
printf("\n");
for(; i < count; i++)
{
printf("%d\t%s\n", buf[i].id, buf[i].name);
}

/* 输出:
1 zhangsan
2 lisi
3 wangwu
*/

fclose(pRead);
}
}

return 0;
}

0%