2012-10-29 44 views
0

我有在CC列出 - 訪問一個結構的成員,並在打印

一些麻煩列出我做了這個結構:主

typedef struct str { 
char * str; 
struct str * prox; 
struct str * ant; 
} cadena; 

然後我開始列表其第一個指針指向NULL。

cadena * lista = NULL; 

然後我做了一個功能,用戶可以(在「海峽」成員弦)新元素添加到列表和我管理的指針,以生成列表。這似乎工作確定。我希望。

但是,當我想打印一個節點中的一員,它我試圖用這樣的事情,而且它不工作:

void showdata (cadena *lista) { 
    int i=0; 
    while (lista.str[i] != '\0') 
    { 
     printf("%c\n",str[i]); 
     i++; 
    } 
} 

我得到這些錯誤:

from line "while (lista.str[i] != '\0')" 
.error: request for member ‘str’ in something not a structure or union 

(爲什麼會期待一個結構呢?我想我訪問有一個成員)

from line "printf("%c\n",str[i]);"  
.error: ‘str’ undeclared (first use in this function) 

(是不是與申報struct?)

我確實在做一些非常錯誤的事情,但我無法理解哪一個是訪問char成員並打印它的正確方法。

預先感謝您。

回答

0

這是一個指針符號問題。 C可能會以這種方式混淆。

lista.str[i]

不起作用,因爲C不承認 「」當移動到一個領域。這對於像我這樣習慣於C#或其他OOP語言的人來說可能是個問題,您可以在其中使用「。」。修改一個對象的屬性,如

control.visibility = "False"

在C語言中,結構是基於指針,所以你需要使用 - >像基斯說。你是指向到內存中的某個位置,或者某個字段所在結構中的「位置」。想想那樣,你不應該有太多問題。

C還允許您使用「。」...但僅限於您強烈鍵入引用。對你來說,這將意味着要

(*lista).str[i]

,使您參考LISTA實例被看作是一個指針結構。

所以,在複習,無論是

lista->str[i]

(*lista).str[i]

應該工作。

+1

我正要在這裏發表評論,並將第一個正確答案留作解決方案。但我需要改變這個問題的最佳答案。你是正確的第一個答案(謝謝大家!!),但你也留下了很多有用的信息。就像在這種情況下如何使用「點」一樣。非常感謝。在C中管理列表對我來說很難,因爲我無法清楚地「看到」發生了什麼。而且因爲我剛剛開始用C編程,今年在大學裏。 – LeanDroid

1
lista.str[i] 

應該

lista->str[i] 

任何地方,你有一個指針,你使用結構 - >不是。

+0

謝謝。這工作。但是在打印成員時出現分段錯誤。 – LeanDroid

+0

可能不會爲您的節點分配內存? –

1

嘗試:

while (lista->str[i] != '\0') 
    printf("%c\n",lista->str[i++]); 
+0

謝謝。使用這種方式我得到鏈接器錯誤。從<< In function'_fini'開始:(.fini + 0x0):'_fini'>>的多重定義,從「多個定義錯誤」開始,然後以<< collect2:ld結束返回1個退出狀態> >。 – LeanDroid

+0

@LeanDroid與您的原始問題無關。但至少我們讓你瞭解了彙編問題。 – WhozCraig

+0

對不起,我的壞。編譯時我犯了一個錯誤。但在嘗試打印成員時收到分段錯誤。 – LeanDroid