在C中如何在带有结构和指针的指针中使用索引
我需要做一个程序,可以注册一些汽车。 然后我需要出示所有的汽车登记簿 我做不到这一点,当我执行printf下面的代码时,只显示内存垃圾,而最后一辆车显示正确!在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,标准尺寸
代码(我有一个调用其他函数的菜单函数):
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);