使用C语言读写结构体数据并保存到文件

使用C语言读写结构体数据并保存到文件

在这篇博客中,我们将探讨如何使用C语言将结构体数据写入文件,并从文件中读取并展示数据。这种操作在很多应用场景中非常有用,比如保存用户信息、配置数据等。

代码实现

以下是完整的代码实现:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

typedef struct Student 
{
    char name[20];
    char sex;
    short age;
    int id;
} Student;

int main(int argc, const char* argv[]) 
{
    int fd;
    Student stu;
    fd = open("student.txt", O_RDWR | O_CREAT, 0644);
    if (fd < 0) 
    {
        perror("open");
        return 1;
    }

    strcpy(stu.name, "王浩楠");
    stu.sex = 'M';
    stu.age = 20;
    stu.id = 1001;

    char str[100];
    sprintf(str, "name:%s,sex:%c,age:%d,id:%d", stu.name, stu.sex, stu.age, stu.id);
    write(fd, str, strlen(str));

    char buf[256] = {};
    lseek(fd, 0, SEEK_SET);
    int size = read(fd, buf, 256);
    printf("%s\n", buf);

    close(fd);
    return 0;
}
代码分析
  1. 定义结构体

    • Student结构体包含四个字段:姓名、性别、年龄和ID。
  2. 打开文件

    • 使用open函数以读写模式(O_RDWR)和创建模式(O_CREAT)打开或创建文件student.txt。文件权限设置为0644(所有者读写,其他人只读)。如果打开文件失败,程序会输出错误信息并退出。
  3. 初始化结构体数据

    • 使用strcpy将字符串赋值给结构体中的name字段,随后直接赋值性别、年龄和ID字段。
  4. 将结构体数据写入文件

    • 使用sprintf将结构体数据格式化为字符串,并通过write函数将字符串写入文件。这里使用了格式化字符串"name:%s,sex:%c,age:%d,id:%d"来组织数据。
  5. 读取并展示文件内容

    • 通过lseek将文件指针重新定位到文件开头,然后使用read函数将文件内容读入缓冲区buf,并将其输出到控制台。
  6. 关闭文件

    • 使用close函数关闭文件,确保资源被正确释放。
运行示例

程序运行后会在当前目录下生成student.txt文件,并输出以下内容:

name:王浩楠,sex:M,age:20,id:1001
关键点
  1. 结构体数据的格式化

    • 使用sprintf将结构体数据格式化为字符串,方便后续保存和读取。这种方式适合保存一些简单的结构体数据。
  2. 文件读写操作

    • 使用write将字符串写入文件,并通过read读取文件内容,展示了基本的文件操作方法。
  3. 错误处理

    • 程序对open函数进行了错误处理,确保在文件打开失败时输出错误信息并退出。
总结

这段代码展示了如何使用C语言将结构体数据保存到文件,并从文件中读取并展示数据。这种方法适用于简单的数据保存需求。在实际应用中,针对复杂的数据结构,可能需要使用二进制格式保存或采用更复杂的序列化方法。

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中的文件读写结构体主要包括文件指针和文件操作函数。下面是一个简单的介绍: 1. 文件指针: 在C语言中,使用文件指针来表示文件的位置和状态。文件指针是一个特殊的指针,用于指向文件的位置。常用的文件指针类型是`FILE`,它是通过`stdio.h`头文件定义的。 2. 文件操作函数: C语言提供了一系列的文件操作函数,用于打开、关闭、读取和写入文件。常用的文件操作函数有: - `fopen()`:打开文件,返回一个指向文件的指针。 - `fclose()`:关闭文件。 - `fread()`:从文件中读取数据。 - `fwrite()`:向文件中写入数据。 - `fprintf()`:向文件中格式化输出数据。 - `fscanf()`:从文件中格式化读取数据。 下面是一个示例代码,演示了如何使用结构体进行文件读写: ```c #include <stdio.h> // 定义一个结构体 struct Student { char name[20]; int age; float score; }; int main() { struct Student stu; FILE *file; // 打开文件 file = fopen("student.txt", "w"); if (file == NULL) { printf("无法打开文件!\n"); return 1; } // 写入数据文件 strcpy(stu.name, "张三"); stu.age = 18; stu.score = 90.5; fwrite(&stu, sizeof(struct Student), 1, file); // 关闭文件 fclose(file); // 打开文件 file = fopen("student.txt", "r"); if (file == NULL) { printf("无法打开文件!\n"); return 1; } // 从文件中读取数据 fread(&stu, sizeof(struct Student), 1, file); printf("姓名:%s\n", stu.name); printf("年龄:%d\n", stu.age); printf("分数:%f\n", stu.score); // 关闭文件 fclose(file); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值