程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言:使用realloc函數對malloc或者calloc動態分配的內存大小進行擴展,realloccalloc

C語言:使用realloc函數對malloc或者calloc動態分配的內存大小進行擴展,realloccalloc

編輯:關於C語言

C語言:使用realloc函數對malloc或者calloc動態分配的內存大小進行擴展,realloccalloc


#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("數據庫初始化失敗!\n");

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\n",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\n",db->pData);

if(db->pData == NULL)

{

return -1;

}

}

//插入新紀錄

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

db->count++;

return 0;

}

//打印數據庫的內容

void printDatabase(Database* db)

{

printf("數據庫的大小:%d,現有記錄個數:%d\n",db->size,db->count);

printf("  姓名          年齡    性別    數學    語文    英語\n");

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

{

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

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]);

}

}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved