2013-07-02 177 views
0

我想分配內存指針結構數組,但它給了我一個奇怪的錯誤。下面的代碼:錯誤分配指針數組結構

struct command{ 
    int type; 
    char* input; 
    char* output; 
    struct command *command[2]; 
} 

當我嘗試了數組大小2分配內存時,我嘗試:

temp->command = (command*)malloc(sizeof(struct command[2])); 

不過,我得到這個錯誤:

incompatible types when assigning to type âstruct command *[2]â from type âstruct command *â 

什麼建議嗎?

+0

'temp-> command [0] = ...'和'temp-> command [1] = ...' –

+0

'command'成員不是指向結構數組的指針,它是一個數組兩個指向結構的指針。 –

+0

你想做什麼?創建一個2元素的命令數組或者一個2元素的指向數組的指針?在任何情況下,爲了使malloc滿足當前結構定義,您需要像這樣進行演員製作:(command **) –

回答

1

你需要做這樣的

for(i=0;i<2;i++) 
    temp->command[i] = malloc(sizeof(struct command[i])); 
+0

+我覺得你抓到了正確, –

+0

所以,當訪問命令[0]的內容時,我可以用命令[0] [0]和命令[0] [1]對它進行操作嗎? –

+1

@JessicaMelia - 不,那是錯誤的。你應該更好地閱讀關於指針和結構的一些基本的C語言文本。 –

3

您已經聲明command爲指針的2個元素的數組鍵入struct command,所以你不需要爲陣列分配內存,只是對於每個數組元素,像這樣:

temp->command[i] = malloc(sizeof *temp->command[i]); 
0

如果你想要的元素是一個指針結構數組,那麼你可以聲明和分配是這樣的...

struct command (*command)[2]; /* note the parentheses */ 

temp->command = malloc(sizeof *temp->command); 

...如果你想要的元素是一個指針數組,那麼你可以做這樣的事情:

struct command *command[2]; /* equivalent to *(command[2]) */ 

temp->command[0] = malloc(sizeof *temp->command[0]); 
temp->command[1] = malloc(sizeof *temp->command[1]); 

(需要注意的是一個很好的方式,以確定「指針數組」 VS 「指向數組的指針」是根據運算符優先級和關聯性規則,從變量名向外工作。例如,如果你的聲明是「sometype * myvar [2]」,你將以「myvar是一個數組......」而不是「myvar是指向...的指針」開始,因爲[]比*有更高的優先級。 )

錯誤信息是因爲你的轉換表明type-> command是一個指向struct的指針,這是因爲你聲明瞭它是一個指向struct的指針數組。但是,除非您使用C++編譯器,否則不需要進行強制轉換。