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

问题引入

几个概念需要了解

  • 文件读写过程:打开、读、写、关闭
  • 结构体类型,也是一种类型,用简单数据类型的思维去考虑复杂类型

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[N];
    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;
}

这里写图片描述

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
fopen函数用于打开一个文件,并返回一个指向该文件的指针。它的原型如下: ```c FILE *fopen(const char *filename, const char *mode); ``` 其中,`filename`是要打开的文件名,`mode`是打开文件的模式,例如`"r"`表示只读,`"w"`表示入,`"a"`表示追加等。 fwrite函数用于将数据入文件。它的原型如下: ```c size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); ``` 其中,`ptr`是要入的数据的指针,`size`是每个数据项的大小,`nmemb`是要入的数据项的数量,`stream`是要入的文件指针。 fread函数用于从文件中读取数据。它的原型如下: ```c size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);``` 其中,`ptr`是存储读取数据的缓冲区的指针,`size`是每个数据项的大小,`nmemb`是要读取的数据项的数量,`stream`是要读取的文件指针。 下面是一个示例,演示了如何使用fopenfwritefread函数: ```c #include <stdio.h> int main() { FILE *file; char data[] = "Hello, World!"; char buffer[20]; // 打开文件并数据 file = fopen("example.txt", "w"); fwrite(data, sizeof(char), sizeof(data), file); fclose(file); // 打开文件并读取数据 file = fopen("example.txt", "r"); fread(buffer, sizeof(char), sizeof(data), file); fclose(file); printf("Data read from file: %s\n", buffer); return 0; } ``` 这个示例中,首先使用fopen函数打开一个名为"example.txt"的文件,并以入模式打开。然后使用fwrite函数将字符串"Hello, World!"入文件。接着使用fopen函数以读取模式打开同一个文件,并使用fread函数从文件中读取数据到缓冲区中。最后,打印出从文件中读取的数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值