Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 应为带指针的标识符_C_Identifier - Fatal编程技术网

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 from
TItem*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);