-1

./drzwoposzukiwanbinarnych.c:84:24: エラー: â)â トークンの前に式が必要です

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;

そのポインターワードが指すようにしたい-以下に定義されているchar slowo [30]。

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

そして、私が立ち往生している点は、この質問の上部にあるエラーです。私はコーディングに非常にうんざりしており、私の心は完全に過熱しているため、私の質問は申し訳ありませんが、その場合はうまく形成されていない可能性があります.

しかし、なぜ私はこれをやろうとしているのですか?グローバルに定義された単語をポインターに割り当てる際に問題があり、そのグローバルに定義された単語に新しい単語を読み込むと、構造体 (ポインター) 内の単語も変更されることに気付きました。

4

3 に答える 3

2

キャスト(wyraz*)を外すだけで、すべて問題ありません。あなたがそれを保持することを主張する場合(それは不要であり、しばしば有害であると考えられますが)、(slowa *)代わりに保持する必要があります.

于 2013-01-06T15:53:12.800 に答える
0

これ:

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

ポインタが一致していません。これは次のように書くとよいでしょう:

slowa *my_slowa = malloc(sizeof *my_slowa);

これにより、無意味なキャストが削除され、演算子を使用して、sizeof割り当てられたバイト数がポインターの型と一致することが保証されます。

私の意見では、このようなコードは、このキャストを使用しないことのかなり良い議論です。

于 2013-01-06T15:56:48.600 に答える
0

型キャストが変数名キャストではなくキャストと呼ばれるのには理由があります。あなたがやろうとしているのは、宣言されたばかりの変数の名前を型名として使用することですが、もちろん意味がありません。の戻り値をキャストする場合は、変数名ではなく型を使用する必要があります。malloc()

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

ただし、C では、malloc の戻り値をキャストしないでください。sizeof(*ThePointer)さらに、タイプが変更された場合に備えて、使用した場合はエラーが発生しにくくなりますsizeof(TheType)。全体として、これを書きます:

slowa *wyraz = malloc(sizeof(*wyraz));
于 2013-01-06T15:57:37.647 に答える