我这里面为什么出错呢?自己找不出来哪里有问题
原码第7行给变量ABCD赋初始值0
文件打开后需要销毁通讯录,把在程序中所写的通讯录保存至文件中
void DestoryContact(Contact* pc)
{
free(pc->data);
pc->data = NULL;
pc->capacity = 0;
pc->sz = 0;
printf("销毁成功\n");
}
void SaveContact(const Contact* pc)
{
FILE* pf =fopen("Contact.txt", "wb");//二进制方式写进去
if (pf == NULL)
{
perror("SaveContact::fopen");
return ;
}
//写文件
int i = 0;
for (i = 0; i < pc->sz; i++)
{
fwrite(pc->data + i, sizeof(PeoInfo), 1, pf);
}
printf("保存成功!\n");
//关闭文件
fclose(pf);
pf = NULL;
}
初始化通讯录 --文件版本
把我们之前结束时保存的通讯录名单导入加载到程序中(初始化时)
//初始化通讯录 --文件版本
void LoadContact(Contact* pc)
{
//打开文件
FILE*pf =fopen("Contact.txt", "rb");
if (pf == NULL)
{
perror("LoadContact::fopen");
return;
}
//读文件
PeoInfo tmp = { 0 };
while (fread(&tmp, sizeof(PeoInfo), 1, pf))//返回的数值比要求读写的count数据小,代表读写完成,如果返回0代表没读取到
{
//通讯录初始化也要扩容,防止数据大于初始值
CheckCapacity(pc);
pc->data[pc -> sz] = tmp;//读取一个信息放到sz中,因为默认sz=0
pc->sz++;
}
//关闭文件
fclose(pf);
pf = NULL;
}
void InitContact(Contact* pc)
{
assert(pc);
pc->sz = 0;
pc->capacity = DEFAULF_SZ;
pc->data = (PeoInfo*)malloc(pc->capacity * sizeof(PeoInfo));
if (pc->data == NULL)
{
perror("InitContact:malloc");
return;
}
memset(pc->data, 0, pc->capacity * sizeof(PeoInfo));
//加载文件信息到通讯录中
LoadContact(pc);
}
- 您还可以看一下 黄强老师的30分钟彻底学会C语言指针视频教程课程中的 指针的指针小节, 巩固相关知识点