2014-09-12 64 views
0

我正在嘗試不同的方式來處理struct值,但所有這些方法都給我錯誤。 所以, 我有以下的全球結構:需要幫助理解錯誤使用結構C

struct Car_ { 
    char *currentCar; 
    char **cars; 
}carPars; 

然後我修整分配* currentCar成員,使其指向**汽車的第一陣列。 我這樣做以下列方式:

tokenizer->currentToken = tokenizer.tokens[0]; 

這告訴會員引用類型「結構TokenizerT_」不是一個指針;也許你打算使用'。'?

然後我嘗試這樣

carPars.currentCar = carPars.cars[0]; 

但是當我運行我的程序這其實給我EXC_BAD_ACCESS(這通常意味着分割故障)。

然後我嘗試:

(*curPars).currentCar = (*car).currentCar[0]; 

但後來我有 - 間接尋址需要指針操作

我會怎麼做它正確的方式?

+0

由於** cars是一個指向指針列表的指針,所以你將需要一個指向包含char指針的內存區域的指針。 – 2014-09-12 12:52:01

回答

1

首先,你必須分配內存的汽車,你想要陣列的數量。可以說10:

cars = (char**)malloc (10*sizeof(char)); 

然後你必須分配內存到每10個陣列。讓我們說,每個陣列中你要10個元素:

> for (index = 0; index< 10; index++) 
>  cars[index] = (char*) malloc(10*sizeof(char)); 

然後分配給CurrentCar,你可以這樣做:

carPars.currentCar = carPars.cars[i]; 
1

您需要先指定cars。想必你希望它是一個數組,說50個元素組成:

carPars.cars = calloc(50, sizeof (char*)); 
+0

好吧,明白了。首先需要分配內存。但是,我將使用什麼語法來進行適當的分配? – YohanRoth 2014-09-12 12:57:13

1

你尚未初始化類型的變量carPars第二成員結構Car_。由於在雙指針**汽車中沒有存儲任何值。你可以嘗試以下方法:

carPars.cars = NULL; 
    carPars.currentCar = carPars.cars[0]; 

,如果它仍然不工作,你可以試試這個:

carPars.cars = (char *)malloc(10*sizeof(char*)); 
for(i=0; i<5; i++) 
    carPars.currentCar = (char)malloc(10*sizeof(char)); 

這裏我假設你要存儲10輛汽車和每節車廂名稱由10字符最大。 您可以根據需要更改此值。