2013-01-06 14 views
-1

./drzwoposzukiwanbinarnych.c:84:24:錯誤:A之前預期的表達)令牌GCC期望表達時,我試圖聲明指針和malloc的得到它

char getNewSlowo(){ 
    slowa *wyraz = (wyraz*) malloc(sizeof(slowa)); //LINE WITH ERROR 
    scanf("%s",wyraz->slowo); 
    return wyraz->slowo; 
} 

我所試圖做的?

所以,我有一個結構:

typedef struct node{ 
char *word; 
unsigned int arity; 
struct node *left,*right,*parent; 
}baza; 

我想使該指針字指向 - 焦slowo [30]定義如下。

typedef struct word{ 
    char slowo[30]; 
}slowa; 

而我被卡住的一點是這個問題上的錯誤。 我對編碼感到非常厭倦,現在我的思維完全過熱,所以如果出現這種情況,我的問題可能並不完整。

但是我爲什麼要這樣做呢? 我有一個指定全局定義的指針的問題,我注意到,當我讀入一個新的單詞到全局定義的單詞結構(指針)中的單詞也改變了。

+0

''''token''意味着你的文件中有一些非asci字符。使用命令行工具od檢查嗎? – cdarke

回答

2

只要刪除鑄(wyraz*),一切都會好起來的。如果你堅持保留它(儘管這是不需要的並且通常被認爲是有害的),它應該是(slowa *)

+0

這很容易,我現在很尷尬......謝謝 –

0

此:

slowa *wyraz = (wyraz*) malloc(sizeof(slowa)); 

有不匹配的指針。最好是寫像這樣:

slowa *my_slowa = malloc(sizeof *my_slowa); 

removes the pointless cast,並使用sizeof操作,以確保分配的字節數相匹配的指針的類型。

像我這樣的代碼是一個非常好的論點,因爲從來沒有這樣的演員,在我看來。

0

類型轉換被稱爲類型鑄造而不是變量名稱鑄造。你想要做的就是使用剛剛聲明的變量的名稱作爲類型名稱,當然這是沒有意義的。如果你打算拋棄的malloc()的返回值,你應該使用一個類型,而不是一個變量名:

slowa *wyraz = (slowa *)malloc(sizeof(slowa)); 

然而,在C,you should not cast the return value of malloc.此外,這將是不容易出錯,如果你使用sizeof(*ThePointer)sizeof(TheType),以防萬一類型改變。總而言之,這樣寫:

slowa *wyraz = malloc(sizeof(*wyraz));