在C中如何在带有结构和指针的指针中使用索引

在C中如何在带有结构和指针的指针中使用索引,c,pointers,struct,malloc,realloc,C,Pointers,Struct,Malloc,Realloc,我需要做一个程序,可以注册一些汽车。 然后我需要出示所有的汽车登记簿 我做不到这一点,当我执行printf下面的代码时,只显示内存垃圾,而最后一辆车显示正确! 代码(我有一个调用其他函数的菜单函数): intid=0; 结构车{ char品牌[50]; char模型[50]; }; 汽车*车库=0; int doCar(){ 车库=(结构车*)malloc(尺寸(结构车*); printf(“\n插入模型:\n\n”); fflush(stdin); fgets(车库[id]。型号50,标准尺寸

我需要做一个程序,可以注册一些汽车。 然后我需要出示所有的汽车登记簿

我做不到这一点,当我执行printf下面的代码时,只显示内存垃圾,而最后一辆车显示正确!

代码(我有一个调用其他函数的菜单函数):

intid=0;
结构车{
char品牌[50];
char模型[50];
};
汽车*车库=0;
int doCar(){
车库=(结构车*)malloc(尺寸(结构车*);
printf(“\n插入模型:\n\n”);
fflush(stdin);
fgets(车库[id]。型号50,标准尺寸);
id++;
}
国际汽车展(){
int i=0;
while(i
考虑以下示例:

#包括
#包括
结构车{
char品牌[50];
char模型[50];
};
//全局变量
car*garage=NULL;
int-cnt=0;
void doCar(){
//添加计数器
cnt++;
//添加内存
车库=realloc(车库,大小(汽车)*cnt);//注意:不是malloc
printf(“输入品牌:”);
scanf(“%49s”,车库[cnt-1]。品牌);//或fgets
printf(“输入模型:”);
scanf(“%49s”,garage[cnt-1].model);//或fgets
}
无效展示车(){
int i;
对于(i=0;i
编辑:

添加要测试的
main
功能:

intmain(intargc,char*argv[])
{
//三辆车的测试
doCar();
doCar();
doCar();
展示车();
//使用后释放内存
免费(车库);
返回0;
}

在函数
ShowCars
中,行
printf(“aqi=%s\n”,(*garage+id).model)
您正在取消对garage的引用,并将
id
添加到该结构中,这应该没有意义。最好用前面的
garage[i]
符号替换它,如下所示:

printf("aqi= %s \n", garage[i].model);

另外,正如其他人之前提到的,您需要分配一辆
sizeof(struct car)
(50+50=100)的新车,而不是
sizeof(struct car*)
(在您的系统4上最有可能是32位指针大小)。最后,每次您创建一辆新车时,您都必须增加车库以指向这些分配。祝你好运

我也尝试使用Realloc,但总是出现相同的错误。
car*garage=0-->
struct car*garage=0
车库=(结构车*)malloc(尺寸(结构车*)-->
garage=(结构车*)malloc(sizeof(结构车))并删除
fflush(标准输入法)这不是真正的C++在ALIF i CudioCuff=(Stutt Car…显示错误:一个类型“Value*”的值不能被分配给一个“Car *”类型的实体<代码> sieZof(StuttCar *)
有点太小,无法容纳
struct car
。我不知道为什么,但是如果我在doCar函数中使用printf,效果很好,但是当我尝试调用ShowCars函数时,不要显示notting
printf("aqi= %s \n", garage[i].model);