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

相关文章
|
27天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
65 4
|
2月前
|
存储 安全 编译器
在 C++中,引用和指针的区别
在C++中,引用和指针都是用于间接访问对象的工具,但它们有显著区别。引用是对象的别名,必须在定义时初始化且不可重新绑定;指针是一个变量,可以指向不同对象,也可为空。引用更安全,指针更灵活。
|
2月前
|
存储 C++
c++的指针完整教程
本文提供了一个全面的C++指针教程,包括指针的声明与初始化、访问指针指向的值、指针运算、指针与函数的关系、动态内存分配,以及不同类型指针(如一级指针、二级指针、整型指针、字符指针、数组指针、函数指针、成员指针、void指针)的介绍,还提到了不同位数机器上指针大小的差异。
54 1
|
2月前
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
39 2
|
2月前
|
存储 安全 编译器
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(一)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
2月前
|
存储 C++ 索引
C++函数指针详解
【10月更文挑战第3天】本文介绍了C++中的函数指针概念、定义与应用。函数指针是一种指向函数的特殊指针,其类型取决于函数的返回值与参数类型。定义函数指针需指定返回类型和参数列表,如 `int (*funcPtr)(int, int);`。通过赋值函数名给指针,即可调用该函数,支持两种调用格式:`(*funcPtr)(参数)` 和 `funcPtr(参数)`。函数指针还可作为参数传递给其他函数,增强程序灵活性。此外,也可创建函数指针数组,存储多个函数指针。
|
3月前
|
存储 算法 C++
【C++核心】结构体、共用体详解
这篇文章详细讲解了C++中结构体和共用体的概念、定义、使用场景和案例,包括结构体的创建、数组、指针、嵌套、函数参数传递,以及共用体的特点和应用实例。
36 4
|
3月前
|
编译器 C++
【C++核心】指针和引用案例详解
这篇文章详细讲解了C++中指针和引用的概念、使用场景和操作技巧,包括指针的定义、指针与数组、指针与函数的关系,以及引用的基本使用、注意事项和作为函数参数和返回值的用法。
51 3
|
2月前
|
存储 编译器 程序员
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(二)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
3月前
|
C++
继续更新完善:C++ 结构体代码转MASM32代码
继续更新完善:C++ 结构体代码转MASM32代码