C 结构分段错误的打印数组

C 结构分段错误的打印数组,c,C,我正在打印我的结构。我想让它显示: id:BBB-188 品牌:宝马 图:1 2 3。 现在的结果是: id:BBB-188 姓名:宝马 分段错误:11。 有人知道我的代码有什么问题吗 定义最大10000 定义IDSIZE 11 定义品牌尺寸50 定义图片大小10 类型定义结构{ 字符id[IDSIZE+1]; char品牌[BRANDSIZE+1]; int*pic; }汽车; void printCarCar*pCar,int carcount,int imagecount{ 打印FID:%

我正在打印我的结构。我想让它显示:

id:BBB-188 品牌:宝马 图:1 2 3。 现在的结果是:

id:BBB-188 姓名:宝马 分段错误:11。 有人知道我的代码有什么问题吗

定义最大10000 定义IDSIZE 11 定义品牌尺寸50 定义图片大小10 类型定义结构{ 字符id[IDSIZE+1]; char品牌[BRANDSIZE+1]; int*pic; }汽车; void printCarCar*pCar,int carcount,int imagecount{ 打印FID:%s\n,pCar->id; 打印品牌:%s\n,pCar->品牌; forint i=0;ipic[i]; } } Car initCarchar itsId[],char itsBrand[],int itsPic,int imagecount{ 新车; strcpynewCar.id,itsId; strcpynewCar.brand,ITS品牌; 对于int i=0;i 您似乎希望将其表示为整数数组,但不存储长度。因此,它必须始终为3,但您可以在结构中使用一个数组,即:

int pic[3];
而不是

int *pic;
此外,initCar中的赋值也没有意义,您正在循环,只是简单地赋值相同的整数值!对于指针imagecount times,未复制任何数据

如果希望图片数组的长度确实可变,则必须存储长度并分配内存以保存数字。因此,在initCar中,您必须具备:

newCar.pic = malloc(imagecount * sizeof *newCar.pic);
memcpy(newCar.pic, itsPic, imagecount * sizeof *newCar.pic);
但是它的pic当然必须是const int*

类型。pic的处理是不完整的,非常混乱

您似乎希望将其表示为整数数组,但不存储长度。因此,它必须始终为3,但您可以在结构中使用一个数组,即:

int pic[3];
而不是

int *pic;
此外,initCar中的赋值也没有意义,您正在循环,只是简单地赋值相同的整数值!对于指针imagecount times,未复制任何数据

如果希望图片数组的长度确实可变,则必须存储长度并分配内存以保存数字。因此,在initCar中,您必须具备:

newCar.pic = malloc(imagecount * sizeof *newCar.pic);
memcpy(newCar.pic, itsPic, imagecount * sizeof *newCar.pic);
但是itsPic当然必须是const int*

类型,您需要在initCar中将itsPic作为指针传递。如果你这样做,你不需要为了做作而使用for循环

Car initCar(char itsId[],char itsBrand[],int* itsPic, int imagecount){
    Car newCar;
    strcpy(newCar.id, itsId);
    strcpy(newCar.brand, itsBrand);
    //for (int i = 0; i < imagecount; i++){
      newCar.pic = itsPic;
    //}
    return newCar;
}
您需要在initCar中将其PIC作为指针传递。如果你这样做,你不需要为了做作而使用for循环

Car initCar(char itsId[],char itsBrand[],int* itsPic, int imagecount){
    Car newCar;
    strcpy(newCar.id, itsId);
    strcpy(newCar.brand, itsBrand);
    //for (int i = 0; i < imagecount; i++){
      newCar.pic = itsPic;
    //}
    return newCar;
}