所以,我正在尝试将一个项目放入我的动态数组中,但我不断收到此错误“预期标识符”。
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;
答案 0 :(得分:0)
lista->*item
语法无效。看起来你想要做的是:
lista->item[lista->utilizado]=itemAux;
但item
结构中的lista
字段只有一个指向TItem
(TItem *
)的指针,但您将其视为指向{{的指针数组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);