通讯录动态版本
之前写过一个通讯录,这次是将通讯录改成了动态版本,可以实现内存不够可以自动开辟的效果。
其实加的内容很少,加的内容如下:
int CheckCapacity(Contact* pcon)
{
assert(pcon != NULL);
if (pcon->sz == pcon->capacity)
{
PeoInfo* tmp = (PeoInfo*)realloc(pcon->data, (pcon->capacity + 2)*sizeof(PeoInfo));
if (tmp != NULL)
{
pcon->data = tmp;
pcon->capacity += 2;
printf("增容成功\n");
return 1;
}
else
{
printf("%s\n", strerror(errno));
return 0;
}
}
else
{
return 1;
}
}
引入了一个变量capacity,用来说明当前通讯录最大容量的,所以我们要在头文件中定义一下:
typedef struct Contact
{
struct PeoInfo* data;
int sz;//记录当前有多少人的信息
int capacity;//当前通讯录的最大容量
}Contact;
在结束时,我还加了一个销毁代码:
void DestoryContact(Contact* pcon);
void DestoryContact(Contact* pcon)
{
assert(pcon != NULL);
free(pcon->data);
pcon->data = NULL;
pcon->sz = 0;
pcon->capacity = 0;
}
当然也要在头文件中定义,我吧这个代码放在了exit里:
int main()
{
int input = 0;
Contact con;
InitContact(&con);
do
{
menu();
printf("请输入选择:");
scanf("%d", &input);
switch (input)
{
case ADD:
AddContact(&con);
break;
case DEL:
DelContact(&con);
break;
case SEARCH:
SearchContact(&con);
break;
case MODIFY:
ModifyContact(&con);
break;
case SHOW:
ShowContact(&con);
break;
case SORT:
SortContact(&con);
break;
case EXIT:
DestoryContact(&con);
printf("退出程序\n");
break;
default:
printf("输入错误\n");
break;
}
} while (input);
return 0;
}
结合我上次的博客,这个通讯录就可以实现动态了。