一、用到的函数
#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