带指针的预期标识符

时间:2014-11-20 13:42:53

标签: c identifier

所以,我正在尝试将一个项目放入我的动态数组中,但我不断收到此错误“预期标识符”。

void Lista_Inicia(TLista *lista) {
    lista->item = (TItem *) malloc(100 * sizeof(TItem));
    lista->tamanho=100;
    lista->utilizado=0;
};

void Lista_Insere(TLista *lista, char palavra[]) {
    if(lista->tamanho==lista->utilizado){
        printf("Erro, não há espaço para inserção\n");
        return;
    }

    TItem* itemAux=malloc(sizeof(TItem));
    itemAux->quantidade=malloc(sizeof(int));
    itemAux->quantidade=1;
    itemAux->palavra=malloc(sizeof(char)*strlen(palavra)+1);
    strcpy(itemAux->palavra,palavra);
    lista->*item+(lista->utilizado)=itemAux; // <---Expected identifier here
    lista->utilizado++;
    printf("%d", lista->utilizado);
}

我已经尝试过这些代码而不是这段代码:

lista->item+(lista->utilizado)=itemAux; 
lista->*item[lista->utilizado]=itemAux; 
lista->item[lista->utilizado]=itemAux; 

我正在使用的结构:

typedef struct Item {
    char* palavra;
    int quantidade;
} TItem;

typedef struct Lista {
    TItem* item;
    int tamanho;
    int utilizado;
} TLista;

3 个答案:

答案 0 :(得分:0)

lista->*item语法无效。看起来你想要做的是:

lista->item[lista->utilizado]=itemAux;

item结构中的lista字段只有一个指向TItemTItem *)的指针,但您将其视为指向{{的指针数组1}}(TItems)。尝试更新TItem **结构和Lista方法,如下所示:

Lista_Inicia

答案 1 :(得分:0)

您已在列表中分配了100个TItem类型的元素。所以你不需要为每个新项目分配内存。您只需在分配的数组中使用free元素。

该功能可以看起来像

void Lista_Insere( TLista *lista, char palavra[] )
{
    if ( lista->tamanho == lista->utilizado + 1 )
    {
        printf("Erro, não há espaço para inserção\n");
        return;
    }

    lista->item[lista->utilizado].quantidade = 1;
    lista->item[lista->utilizado].palavra = malloc( strlen( palavra ) + 1 );
    strcpy( lista->item[lista->utilizado].palavra, palavra );

    lista->utilizado++;

    printf("%d", lista->utilizado);
}

或者您可以使用临时变量

以下列方式重写该函数
void Lista_Insere( TLista *lista, char palavra[] )
{
    if ( lista->tamanho == lista->utilizado + 1 )
    {
        printf("Erro, não há espaço para inserção\n");
        return;
    }

    TItem itemAux;

    itemAux.quantidade = 1;
    itemAux.palavra = malloc( strlen( palavra ) + 1 );
    strcpy( itemAux.palavra, palavra );

    lista->item[lista->utilizado++] = itemAux;

    printf("%d", lista->utilizado);
}

答案 2 :(得分:0)

更改为

TItem itemAux;
itemAux.quantidade=1;
itemAux.palavra=malloc(sizeof(char)*(strlen(palavra)+1));
strcpy(itemAux.palavra, palavra);
lista->item[lista.utilizado]=itemAux;
lista->utilizado++;
printf("%d", lista->utilizado);