C 应为带指针的标识符
所以,我试图在我的动态数组中放入一个项,但我一直得到这个错误“预期标识符” 我正在使用的结构:C 应为带指针的标识符,c,identifier,C,Identifier,所以,我试图在我的动态数组中放入一个项,但我一直得到这个错误“预期标识符” 我正在使用的结构: typedef struct Item { char* palavra; int quantidade; } TItem; typedef struct Lista { TItem* item; int tamanho; int utilizado; } TLista; lista->*项的语法无效。看起来您要做的是: lista->item[list
typedef struct Item {
char* palavra;
int quantidade;
} TItem;
typedef struct Lista {
TItem* item;
int tamanho;
int utilizado;
} TLista;
lista->*项
的语法无效。看起来您要做的是:
lista->item[lista->utilizado]=itemAux;
但是您的列表a
结构中的项
字段只有一个指向TItem
(TItem*
)的指针,但您将其视为指向TItem
(TItem**
)的指针数组。尝试更新您的Lista
struct和Lista\u Inicia
方法,如下所示:
typedef struct Lista
TItem **item;
int tamanho;
int utilizado;
} TLista;
void Lista_Inicia(TLista *lista) {
lista->item = (TItem **)malloc(100 * sizeof(TItem *));
lista->tamanho=100;
lista->utilizado=0;
};
您已经在列表中分配了100个TItem类型的元素。因此,您不需要为每个新项目分配内存。您只需在分配的数组中使用一个空闲元素 该函数可以如下所示
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);
}
改为
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);
lista->*item
无效。简单的印刷错误。lista->item+(lista->utilizado)=itemAux代码>lista->item+(lista->utilizado)
在我看来不像左值。此行:lista->*item+(lista->utilizado)=itemAux;最好写为:lista+(lista->utilizado)->item=itemAux;使用-Wall--pedantic
编译,因为这样:itemAux->quantidade=malloc(sizeof(int))
应该让编译器对您大喊大叫:将指针分配给int
成员。。。这是错误的,特别是考虑到你正在泄漏内存:itemAux->quantidade=1代码>,并且您在任何时候都没有空闲。itemAux
…我正在尝试从lista->item访问其他位置。然后lista->item[lista->utilizado]=itemAux代码>看起来像你想要的。使用时会出现什么错误?“错误:从不兼容的类型“TItem*”(又称“struct Item*”)分配给“TItem”(又名“struct Item”)”;尊重*“我想我已经知道你想做什么了。看看更新后的答案。谢谢,解决了这个问题,但问题仍然存在。@Bruno Salerno Rocha我重写了我的帖子。所以再看一遍。你能指出OP代码的哪一部分应该更改吗?@DavidFaber fromTItem*itemAux=malloc(sizeof(TItem));
到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);
}
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);