标准IO实现fwrite保存数据,另外一个程序通过fread读取数据

一、用到的函数

#include <stdio.h>

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
函数功能:从stream指示的文件中读nmemb个数据,每一个数据有size个大小,到ptr指示的空间中
函数返回值:成功返回成功读到的个数,失败返回0
    
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
函数功能:王stream里面写nmemb个数据,每一个数据有size个大小,数据从ptr来的
函数返回值:成功返回成功写入的个数,失败返回0

二、源码

2.1、head.h

#ifndef _HEAD_H
#define _HEAD_H

// 导入标准库文件,用于基本操作
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/**
 * 定义person结构体,用于存储个人信息
 * 
 * name: 个人姓名,存储长度不超过20个字符的字符串
 * age: 个人年龄,以整数形式存储
 */
struct person{
    char name[20];
    int age;
};

#endif

2.2、write.c

#include "head.h"

/**
 * 主函数:程序入口点
 * @param argc 命令行参数的数量
 * @param argv 命令行参数的字符串数组
 * @return 程序退出状态
 * 
 * 功能描述:
 * 1. 检查命令行参数是否足够,如果不足够,则打印使用方法并退出。
 * 2. 打开指定的文件以进行写操作。
 * 3. 如果文件打开失败,则打印错误信息并退出。
 * 4. 创建并初始化一个person结构体实例。
 * 5. 将person结构体实例写入打开的文件中。
 * 6. 关闭文件。
 */
int main(int argc, char *argv[])
{
    FILE *fp = NULL;

    /* 检查命令行参数数量,如果不足够,则打印使用方法并退出 */
    if(argc < 2){
        printf("Usage: %s <file_name>\n", argv[0]);
        return -1;
    }

    /* 尝试打开指定的文件以写入模式 */
    fp = fopen(argv[1], "w");
    /* 如果打开失败,则打印错误信息并退出 */
    if(fp == NULL){
        printf("fopen error\n");
        return -1;
    }

    /* 创建并初始化一个person结构体实例 */
    struct person p1 = {"zhangsan", 18};

    /* 将person结构体实例写入打开的文件中 */
    fwrite(&p1, sizeof(p1), 1, fp);

    /* 关闭文件 */
    fclose(fp);

    return 0;
}

2.3、read.c.

#include "head.h"

/**
 * 程序入口主函数
 * @param argc 命令行参数的数量
 * @param argv 命令行参数的字符串数组
 * @return 程序退出状态
 * 
 * 该函数的目的是从文件中读取一个人的年龄和姓名并显示出来。
 * 它首先检查命令行参数是否足够,然后打开文件,读取数据,最后关闭文件并释放内存。
 */
int main(int argc, char *argv[])
{
    /* 检查命令行参数是否足够 */
    if(argc < 2){
        printf("Usage: %s <file——name>\n", argv[0]);
        return 1;
    }

    FILE *fp = NULL;

    /* 动态分配内存以存储结构体person的信息 */
    struct person *ptr = (struct person *)malloc(sizeof(struct person));

    /* 清零刚刚分配的内存,以确保所有字段都被初始化 */
    memset(ptr, 0, sizeof(struct person));

    /* 尝试打开命令行参数指定的文件 */
    fp = fopen(argv[1], "r");
    /* 如果文件打开失败,则提示用户并退出 */
    if(fp == NULL){
        printf("Can't open file %s\n", argv[1]);
        return 1;
    }

    /* 从文件中读取一个人的信息到结构体中 */
    fread(ptr, sizeof(struct person), 1, fp);

    /* 打印读取到的信息 */
    printf("age = %d, name = %s\n", ptr->age, ptr->name);

    /* 关闭文件 */
    fclose(fp);

    /* 释放之前分配的内存 */
    free(ptr);

    return 0;
}

三、运行结果

四、源码下载链接

链接:https://pan.baidu.com/s/1Kd9PqF1UWbSBPL7LZAfjYQ 
提取码:36wn

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 22:40:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 22:40:04       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 22:40:04       58 阅读
  4. Python语言-面向对象

    2024-07-18 22:40:04       69 阅读

热门阅读

  1. C# Linq用法

    2024-07-18 22:40:04       19 阅读
  2. Windows桌面应用开发框架

    2024-07-18 22:40:04       23 阅读
  3. 生成 HTTPS 证书并配置到 Nginx 的完整步骤

    2024-07-18 22:40:04       22 阅读
  4. tensorflow1基础函数学习

    2024-07-18 22:40:04       22 阅读
  5. cookies,sessionStorage和localStorage都有什么区别

    2024-07-18 22:40:04       18 阅读
  6. 力扣 541反转链表2

    2024-07-18 22:40:04       22 阅读
  7. Vue3+TypeScript项目目录结构及文件作用

    2024-07-18 22:40:04       24 阅读
  8. Scala之OOP讲解

    2024-07-18 22:40:04       19 阅读
  9. 自动驾驶目标检测常见Metrics

    2024-07-18 22:40:04       22 阅读