-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 回答