【C语言】动态通讯录

在前文静态通讯录的基础上进行修改,本次通讯录所创建联系人的个数是变化的,而不是之前1000个固定的,可能会造成内存的浪费等问题。
1.初始化函数

void InitContact(struct Contact* ps)
{
 /*memset(ps->data,0,sizeof(ps->data));
 ps->size = 0;*/
 ps->data = (struct PeoInfo*)malloc(DEFAULT_CAPCITY*sizeof(struct PeoInfo));
 if (ps->data == NULL)
 {
  return 0;
 }
 ps->size = 0;
 ps->capacity = DEFAULT_CAPCITY;
}

利用malloc函数将增加所需要的空间,并将地址交由ps->data来维护。
2.增加联系人函数
先利用CheckCapacity函数检查通讯录的内存是否足够,若不足利用realloc创建内存。

void AddContact(struct Contact* ps)
{
 CheckCapacity(ps);
 printf("请输入名字\n");
 scanf("%s", ps->data[ps->size].name);
 printf("请输入年龄\n");
 scanf("%d", &(ps->data[ps->size].age));
 printf("请输入性别\n");
 scanf("%s", ps->data[ps->size].sex);
 printf("请输入电话\n");
 scanf("%s", ps->data[ps->size].tele);
 printf("请输入地址\n");
 scanf("%s", ps->data[ps->size].addr);
 ps->size++;
 printf("添加完成\n");
}

3.CheckCapacity函数

void CheckCapacity(struct Contact* ps)
{
 if (ps->size == ps->capacity)
 {
  struct PeoInfo* ptr = realloc(ps->data, (ps->capacity + 2) * sizeof(struct PeoInfo));
  if (ptr == NULL)
  {
   return 0;
  }
  else
  {
   ps->data = ptr;
   ps->capacity += 2;
  }
 }
}

4.对malloc创建的内存进行释放

void DestoryContact(struct Contact* ps)
{
 free(ps->data);
 ps->data = NULL;
}

github源码(https://github.com/bijian0530/CSDN)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值