在前文静态通讯录的基础上进行修改,本次通讯录所创建联系人的个数是变化的,而不是之前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)