typedef struct dvdtype{
int dvdcode;
char title[50];
int customerID;
int daysowned;
}dvdtype;
typedef struct dvdstruct{
dvdtype *dvd;
int numdvds;
}dvdstruct;
void initDvds(dvdstruct *dvds);
int displayMainMenu();
void insertMovie(dvdstruct *dvds,int *n);
void initDvds(dvdstruct *dvds)
{
int i;
dvds->dvd=(dvdtype*)malloc(5*sizeof(dvdtype));
if(dvds->dvd==NULL){
printf("not enough memory\n");
exit(1);
}
dvds->numdvds=0;
for(i=0;i<5;i++)
{
dvds->dvd[i].customerID=-1;
dvds->dvd[i].daysowned=-1;
dvds->dvd[i].dvdcode=-1;
dvds->dvd[i].title[0]='\0';
}
}
void insertMovie(dvdstruct *dvds,int *n){
int code;
if(dvds->numdvds>=(*n))
{
dvds->numdvds++;
dvds->dvd=realloc(dvds->dvd,(dvds->numdvds)*sizeof(dvdtype));
if(dvds->dvd==NULL){
printf("not enough memory\n");
exit(1);
}
printf(" realloc succesful,size now is :%d \n",dvds->numdvds);
dvds->dvd[dvds->numdvds].customerID=-1;
dvds->dvd[dvds->numdvds].daysowned=-1;
printf("give code and name of movie \n");
scanf("%d\n",&code);
dvds->dvd[dvds->numdvds].dvdcode=code;
gets(dvds->dvd[dvds->numdvds].title);
}
else
{
printf("give code and name of movie \n");
scanf("%d\n",&code);
dvds->dvd[dvds->numdvds].dvdcode=code;
gets(dvds->dvd[dvds->numdvds].title);
dvds->numdvds++;
}
}
我写了这个程序来制作电影列表。使用功能
inidvds
,我用malloc
为5个DVD腾出空间并进行初始化。然后,用户调用功能insertmovie
将影片插入文件。老师要我们以下。如果用户提供5个DVD(这是我们从一开始就想要的大小),请调用函数
realloc
并为另外1个DVD腾出空间。这行得通,我的意思是当我看5部电影时就可以了。我可以选择打印电影,它可以打印所有5部电影。然后,如果我选择再次添加电影(n = 5),则转到if并且必须执行realloc
函数。我把这个
printf(" malloc successful,size now is :%d \n",dvds->numdvds);
这样我就可以查看
realloc
了。它打印:malloc成功,新大小为6
它要求我提供我们想要的电影代码和名称。输入代码和名称,然后再次打印列表。它会打印我确定的前5部电影,但不会打印第6部电影。
例如:
Dvdcode is 5
dvd name is: tarzan
Customer id is: -1(the initialized value)
假设这是我拍摄的第五部电影。那么第六个就是这样。
Dvdcode is 0
dvd name is:
Customer id is: 0
(Dvd name is empty)
这意味着什么?
realloc
不起作用? 最佳答案
C中的数组基于0
,即第一个元素是array[0]
,第二个元素是array[1]
,依此类推。
因此,这些insertMovie()
行:
if(dvds->numdvds>=(*n))
{
dvds->numdvds++;
dvds->dvd=realloc(dvds->dvd,(dvds->numdvds)*sizeof(dvdtype));
if(dvds->dvd==NULL){
printf("not enough memory\n");
exit(1);
}
printf(" realloc succesful,size now is :%d \n",dvds->numdvds);
dvds->dvd[dvds->numdvds].customerID=-1;
dvds->dvd[dvds->numdvds].daysowned=-1;
printf("give code and name of movie \n");
scanf("%d\n",&code);
dvds->dvd[dvds->numdvds].dvdcode=code;
gets(dvds->dvd[dvds->numdvds].title);
应该:
if(dvds->numdvds>=(*n))
{
dvds->dvd=realloc(dvds->dvd,(dvds->numdvds + 1)*sizeof(dvdtype));
if(dvds->dvd==NULL){
printf("not enough memory\n");
exit(1);
}
printf(" realloc succesful,size now is :%d \n",dvds->numdvds + 1);
dvds->dvd[dvds->numdvds].customerID=-1;
dvds->dvd[dvds->numdvds].daysowned=-1;
printf("give code and name of movie \n");
scanf("%d\n",&code);
dvds->dvd[dvds->numdvds].dvdcode=code;
gets(dvds->dvd[dvds->numdvds].title);
dvds->numdvds++;
关于c - 重新分配结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22477402/