2015-04-06 33 views
0

的結構成員陣列我有這兩個結構C結構

struct List { 
    unsigned length; 
    char * value; 
}; 

struct bal { 
    List name;    
    List ** attributes;  
}; 

所以結構列表將處理字符的字符串,即時通訊將焦炭(用函數使用malloc)創建我的字符串。

我的結構BAL兩個成員,一個是它是一個結構列表和其他成員是結構清單Array的名字,這樣我就可以一個struct BAL添加屬性。

我沒有問題,直到我嘗試訪問我的一個結構BAL的屬性列表。如果我的結構BAL爲3個屬性,我的屬性列表的表示應該是這樣的:

attributes[0]; 
attributes[1]; 
attributes[2]; 

每個位置是一個結構列表。所以,如果我想讓說printf的一個屬性,我的想法是,這是我一直做這樣的事情:

bal firstBal; 

讓我們說我在程序中添加3個屬性。

然後將其打印出來,我做的事:

printf("The first attributes is : %s ", firstBal->attributes[0]->value); 

但是,當我這樣做,我得到的錯誤:

error: request for member value in something not a structure or union 

但我不知道爲什麼?我的結構bal有一個成員是一個結構列表數組,所以當我添加一個結構列表在該數組中,我應該能夠訪問我的結構列表的成員價值。

我的結構列表的成員值是一個字符串,所以......

非常感謝您!

+0

我認爲你需要用malloc()來發布零件。 – 2015-04-06 00:53:47

+0

你沒有告訴你分配你的結構。沒有這些信息,沒有辦法回答一些問題。另外,你聲明'bal firstBal'指示'firstBal'爲'struct',但是你可以將它作爲指針引用:'firstBal - > ...'。您應該將其引用爲:'firstBal.attributes [0] - > value',因爲它不是指針。 ' - >'運算符用於* pointer *的結構(*例如*,如果您有聲明'bal * firstBal;'並且您動態分配'firstBal')。 – lurker 2015-04-06 00:54:33

回答

0

我找出兩個問題與您的代碼:

  1. 您提到,在struct bal

    其他成員是struct List

    然而數組,成員attributes聲明在代碼作爲List **,即作爲指向的陣列變量和我的猜測是,這不是你想要的。

  2. ->運算符用於訪問由指針變量指向的結構/聯合的成員(這就是爲什麼它看起來這個箭頭的原因)。然而,在你的代碼不是這種情況下firstBal沒有被定義爲一個指針,但正如struct bal類型的變量。因此,爲了使用它的成員字段,你應該使用.運營商,而不是運營商->(即firatBal.attributes)。現在

    firstBal->attributes[0]的類型取決於你想要什麼。如果你堅持要屬性類型爲List **那麼就沒問題。然而,根據我上面的評論,假設它的正確類型是List *,那麼使用數組訪問運算符([])已經爲您提供了變量而不是指向它的指針。換句話說firstBal->attributes[0]List類型的,未List *,這意味着你不能使用->操作符來訪問它的成員,但應該使用.操作

0

您需要聲明:

struct List attributes[3]; 

它的指針應該是*屬性

pattributes = &屬性[0];以下是