用C语言编写通讯录存放联系人信息,开辟动态空间,初始时设置容量为2人,容量满则扩充容量变为4人,但是输入结束后打印,第二个联系人变成乱码。继续扩大容量至6人,第3人与第4人不乱码,只有第二个人发生问题,请问是为什么呢?刚学没多久,好慌乱
头文件中:
//插入头文件
#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NUM 2
struct people
{
char name[30];
int age;
char num[30];
};
struct contact
{
struct people *data;
int sz;
int capacity;
};
//初始化
void first(struct contact* con);
//读文件
void read(struct contact* con);
//添加用户
void Add(struct contact* con);
void write(struct contact* con);
void exit(struct contact* con);
函数源代码:
#include"contact.h"
//初始化
void first(struct contact* con)
{
struct people*str = (struct people*)malloc(sizeof(struct people));
if (str == NULL)
{
perror(first);
printf("初始化失败\n");
}
else
{
con->data = str; //编译到这里con->data[1]里的内容就变成了一堆问号
con->sz = 0;
con->capacity = NUM;
}
}
//打印出联系人
void show(struct contact* con)
{
int i = 0;
printf("%-10s %-10s %-10s\n", "name", "age", "num");
for (i = 0; i < con->sz; i++)
{
printf("%-10s %-10d %-10s\n", con->data[i].name, con->data[i].age, con->data[i].num);
}
}
//检查是否需要扩容
void Check(struct contact *con)
{
if (con->sz == con->capacity)
{
struct people* str= (struct people*)realloc(con->data, sizeof(struct people) * (NUM + con->capacity));
if (str == NULL)
{
perror(Check);
printf("增容失败");
return;
}
else
{
con->data = str;
con->capacity += NUM;
show(con);
}
}
}
//存入联系人
void Add(struct contact* con)
{
Check(con);
printf("请输入姓名:");
scanf("%s", con->data[con->sz ].name);
printf("请输入年龄:");
scanf("%d", &con->data[con->sz].age);
printf("请输入号码:");
scanf("%s", con->data[con->sz].num );
con->sz++;
printf("输入成功\n");