[英]Printing array of struct Segmentation fault
我正在嘗試打印我的結構。 我希望它顯示:
id: BBB-188
brand: BMW
pic: 1 2 3.
現在的結果是這樣的:
id: BBB-188
name: BMW
Segmentation fault: 11.
有人知道我的代碼有什么問題嗎?
#define MAX 10000
#define IDSIZE 11
#define BRANDSIZE 50
#define PICSIZE 10
typedef struct{
char id[IDSIZE+1];
char brand[BRANDSIZE+1];
int *pic;
} Car;
void printCar(Car *pCar,int carcount, int imagecount) {
printf("id: %s \n",pCar->id);
printf("brand: %s \n",pCar->brand);
for(int i=0; i< imagecount; i++){
printf("pic: %d \n",pCar->pic[i]);
}
}
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;
}
int main(void){
int carcount=0;
int imagecount=0;
int test[3]={1,2,3};
Car myCar = initCar("BBB-188","BMW", test, 3 );
carcount=1;
imagecount=3;
printCar(&myCar,carcount,imagecount);
return 0;
}
pic
的處理已損壞並且非常混亂。
您似乎想將其表示為整數數組,但不存儲長度。 因此,它必須始終為三個,但是您可以在結構中使用一個數組,即:
int pic[3];
代替
int *pic;
同樣initCar()
的賦值沒有意義,您在循環,而只是將相同的整數值(!) imagecount
指針imagecount
次,就沒有數據被復制。
如果要使圖片數組的長度真正可變,則必須存儲長度並分配用於容納數字的內存。 因此,在initCar()
您必須具有:
newCar.pic = malloc(imagecount * sizeof *newCar.pic);
memcpy(newCar.pic, itsPic, imagecount * sizeof *newCar.pic);
但是,它的itsPic
當然必須是const int *
類型。
您需要將itsPic
作為指針傳遞itsPic
initCar
。 如果這樣做,則不需要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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.