• C语言:使用realloc函数对malloc或者calloc动态分配的内存大小进行扩展


    #include<stdio.h>

    #include<stdlib.h>

    #include<time.h>

    typedef struct

    {

    char name[32];

    int age;

    char gender;

    float score[3];

    }Student;

    typedef struct

    {

    Student * pData;//学生信息

    int size;//容量大小

    int count;//当前的记录个数

    }Database;

    //初始化数据库

    int initDatabase(Database* db);

    //销毁数据库

    void destoryDatabase(Database* db);

    //插入一条数据

    int insertData(Database* db,Student stu);

    //打印数据库的内容

    void printDatabase(Database* db);

    //随机生成数据

    int myrandom(int range)

    {

    //产生一个range(范围)内的随机数

    return rand()%range;

    }

    int main()

    {

    //初始化随机数种子

    srand((unsigned)time(NULL));

     

    Database db;

    //初始化数据库

    if(initDatabase(&db)!=0)

    {

    printf("数据库初始化失败! ");

    return -1;

    }

    //批量插入数据

    for(int i=0; i<20; i++)

    {

    Student stu;

    sprintf(stu.name,"name%d",i);

    stu.age = myrandom(30);

    stu.gender = myrandom(2) ? 'M' : 'F';

    stu.score[0] = myrandom(100);

    stu.score[1] = myrandom(100);

    stu.score[2] = myrandom(100);

    if(insertData(&db,stu) != 0)

    {

    printf("插入失败!");

    break;

    }

    }

    //打印数据库

    printDatabase(&db);

    //销毁数据库

    destoryDatabase(&db);

    return 0;

    }

    //初始化数据库

    int  initDatabase(Database* db)

    {

    db->size = 10;

    db->count = 0;

    db->pData = (Student*)calloc(db->size,sizeof(Student));

    printf("%p ",db->pData);

    if(db->pData != NULL)

    {

    return 0;

    }

    return -1;

    }

    //销毁数据库

    void destoryDatabase(Database* db)

    {

    free(db->pData);

    db->pData = NULL;

    }

    //插入一条数据

    int insertData(Database* db,Student stu)

    {

    //插入前先判断空间是否已满

    if(db->count == db->size)//如果满了,要先扩展空间

    {

    db->size *= 22;//新的空间大小是原来的两倍

    //用realloc扩展空间

    db->pData = (Student*)realloc(db->pData,db->size*sizeof(Student));

    printf("%p ",db->pData);

    if(db->pData == NULL)

    {

    return -1;

    }

    }

    //插入新纪录

    db->pData[db->count] = stu;

    db->count++;

    return 0;

    }

    //打印数据库的内容

    void printDatabase(Database* db)

    {

    printf("数据库的大小:%d,现有记录个数:%d ",db->size,db->count);

    printf("  姓名          年龄    性别    数学    语文    英语 ");

    for(int i=0; i<db->count; i++)

    {

    printf("%8s %2d %c %.2f %.2f %.2f ",

    db->pData[i].name,

    db->pData[i].age,

    db->pData[i].gender,

    db->pData[i].score[0],

    db->pData[i].score[1],

    db->pData[i].score[2]);

    }

    }

     

  • 相关阅读:
    jsp文件导包 糖不苦
    java 数字和日期处理 糖不苦
    java时间的一些处理 糖不苦
    Vimdiff 使用
    C++资源不完全索引
    sprintf 函数详细解释
    C++ 时间
    C++的可移植性和跨平台开发
    Solaris下开发64位程序的注意事项
    C/C++ 数学库函数
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/4705792.html
Copyright © 2020-2023  润新知