C/C++使用VOID指针保存结构体数据到二进制文件并且读取

简介: 只是演示,细节没有过多注意 程序如下: 主程序: /*************************************************************************   > File Name: change.
只是演示,细节没有过多注意
程序如下:
主程序:

/*************************************************************************
  > File Name: change.cpp
  > Author: gaopeng
  > Mail: gaopp_200217@163.com
  > Created Time: Sun 29 May 2016 05:11:34 PM CST
 ************************************************************************/

#ifndef PAR
#define PAR
#include
#include
#include
#include

using namespace std;
typedef unsigned int UINT;
typedef struct stuna
{
        char name[20];
        UINT  id;
        UINT  sorce;
        char grade[20];
} S_STR;
#endif
#include"fprt.h"
#include"fred.h"


int main(int argc,char *argv[])
{
        cout<<"a.out name id sorce grade *fd"<<ENDL;
        S_STR s_t;

        if(argc < 6)
        {
                cout<<"a.out name id sorce grade *fd"<<ENDL;
                exit(1);
        }

        if(strcpy(s_t.name,argv[1]) == s_t.name)
        {
                cout<<"name is load OK!"<<ENDL;
        }

        if(sscanf(argv[2],"%d",&(s_t.id)) == 1)
        {
                cout<<"id is load OK!"<<ENDL;
        }

        if(sscanf(argv[3],"%d",&(s_t.sorce)) == 1)
        {
                cout<<"sorce is load OK!"<<ENDL;
        }

        if(strcpy(s_t.grade,argv[4]) == s_t.grade)
        {
                cout<<"grade is load OK!"<<ENDL;
        }

    f_prt(&s_t,sizeof(S_STR),argv[5]);
    f_read(argv[5],sizeof(S_STR));
return 0;
}

两个函数
#include"fprt.h" 这个函数用来写入结构体数据到文件

/*************************************************************************
  > File Name: fprt.h
  > Author: gaopeng
  > Mail: gaopp_200217@163.com
  > Created Time: Sun 29 May 2016 07:16:28 PM CST
 ************************************************************************/

#ifndef PAR
#define PAR
#include
#include
#include
#include

using namespace std;
typedef unsigned int UINT;
typedef struct stuna
{

        char name[20];
        UINT  id;
        UINT  sorce;
        char grade[20];
} S_STR;
#endif

#ifndef VOID
#define VOID
typedef void* VP;
#endif


int f_prt(const S_STR* s_in,UINT sz,const char *file  )
{
        FILE *fd;
        VP p = (void *)malloc(sz);

        if(memcpy(p ,(void *)(s_in),sz) == p)
        {
                cout<<"copy ok!"<<ENDL;
        }
        if((fd = fopen(file,"w")) == NULL)
        {
                cout<<"open file is error"<<ENDL;
                exit(10);
        }
   
        cout<<"you data will load in file "<<FILE<<ENDL;
    fwrite(p,1,sz,fd);
        fclose(fd);
        free(p);
        return 0;
}


#include"fred.h" 这个函数用来读取

/*************************************************************************
  > File Name: fprt.h
  > Author: gaopeng
  > Mail: gaopp_200217@163.com
  > Created Time: Sun 29 May 2016 07:16:28 PM CST
 ************************************************************************/

#ifndef PAR
#define PAR
#include
#include
#include
#include

using namespace std;
typedef unsigned int UINT;
typedef struct stuna
{

        char name[20];
        UINT  id;
        UINT  sorce;
        char grade[20];
} S_STR;
#endif
#ifndef VOID
#define VOID
typedef void* VP;
#endif

int f_read(const char *file,UINT sz  )
{
        FILE *fd;
        VP p = (void *)malloc(sz);

        if((fd = fopen(file,"r")) == NULL)
        {
                cout<<"read open file is error"<<ENDL;
                exit(11);
        }
        fread(p,1,sz,fd);
        S_STR *my_st = (S_STR *)p;
        cout << "read data from file " << file << endl;
        cout << my_st->name <<ENDL;
        cout << my_st->id <<ENDL;
        cout << my_st->sorce <<ENDL;
        cout << my_st->grade <<ENDL;

        fclose(fd);
        free(p);
        return 0;
}

比如你想把小明的ID和分数以及评级存储到文件tdata中
./a.out xiaoming 100 100 good tdata
程序执行如下:
a.out name id sorce grade *fd
name is load OK!
id is load OK!
sorce is load OK!
grade is load OK!
copy ok!
you data will load in file tdata
read data from file tdata
xiaoming
100
100
good
这样就在执行目录下生产了tdata文件,我们可以用cdump -Cv 查看tdata

目录
打赏
0
0
0
0
91
分享
相关文章
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
44 12
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
14 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
|
2月前
|
【C++面向对象——输入输出流】处理二进制文件(头歌实践教学平台习题)【合集】
本任务要求使用C++读取二进制文件并在每行前添加行号后输出到控制台。主要内容包括: 1. **任务描述**:用二进制方式打开指定文件,为每一行添加行号并输出。 2. **相关知识**: - 流类库中常用的类及其成员函数(如`iostream`、`fstream`等)。 - 标准输入输出及格式控制(如`cin`、`cout`和`iomanip`中的格式化函数)。 - 文件的应用方法(文本文件和二进制文件的读写操作)。 3. **编程要求**:编写程序,通过命令行参数传递文件名,使用`getline`读取数据并用`cout`输出带行号的内容。 4. **实验步骤**:参考实验指
51 5
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
48 5
深入解析C++中的函数指针与`typedef`的妙用
本文深入解析了C++中的函数指针及其与`typedef`的结合使用。通过图示和代码示例,详细介绍了函数指针的基本概念、声明和使用方法,并展示了如何利用`typedef`简化复杂的函数指针声明,提升代码的可读性和可维护性。
119 1
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
286 4
在 C++中,引用和指针的区别
在C++中,引用和指针都是用于间接访问对象的工具,但它们有显著区别。引用是对象的别名,必须在定义时初始化且不可重新绑定;指针是一个变量,可以指向不同对象,也可为空。引用更安全,指针更灵活。
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
74 2
|
5月前
|
c++的指针完整教程
本文提供了一个全面的C++指针教程,包括指针的声明与初始化、访问指针指向的值、指针运算、指针与函数的关系、动态内存分配,以及不同类型指针(如一级指针、二级指针、整型指针、字符指针、数组指针、函数指针、成员指针、void指针)的介绍,还提到了不同位数机器上指针大小的差异。
143 1
C++函数指针详解
【10月更文挑战第3天】本文介绍了C++中的函数指针概念、定义与应用。函数指针是一种指向函数的特殊指针,其类型取决于函数的返回值与参数类型。定义函数指针需指定返回类型和参数列表,如 `int (*funcPtr)(int, int);`。通过赋值函数名给指针,即可调用该函数,支持两种调用格式:`(*funcPtr)(参数)` 和 `funcPtr(参数)`。函数指针还可作为参数传递给其他函数,增强程序灵活性。此外,也可创建函数指针数组,存储多个函数指针。
142 6
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等