gpt4 book ai didi

c - 从不兼容的指针类型(结构、链表)赋值

转载 作者:行者123 更新时间:2023-12-04 16:10:23 25 4
gpt4 key购买 nike

使用链表创建字典数据结构。

typedef struct _dictionary_entry_t
{
const char* key;
const char* value;
struct dictionary_entry_t *next;
struct dictionary_entry_t *prev;

} dictionary_entry_t;

typedef struct _dictionary_t
{
dictionary_entry_t *head;
dictionary_entry_t *curr;
int size;

} dictionary_t;

正在研究将字典条目添加到链表的功能。

int dictionary_add(dictionary_t *d, const char *key, const char *value)
{
if (d->curr == NULL) //then list is empty
{
d->head = malloc(sizeof(dictionary_entry_t));
d->head->key = key; //set first dictionary entry key
d->head->value = value; //set first dictionary entry value
d->head->next = NULL;
//d->curr = d->head;
}

else
{
d->curr = d->head;

while (strcmp((d->curr->key), key) != 0 && d->curr != NULL) //while keys don't match and haven't reached end of list...
{
d->curr = d->curr->next;

}
}


return -1;
}

将 d->curr 分配给 d->curr->next 给我警告“来自不兼容指针类型的分配”。

我这里的错误是什么? curr 和 next 都是 *dictionary_entry_t 类型

最佳答案

next 是一个 struct dictionary_entry_t *,但是 d->curr 是一个 dictionary_entry_t * 又名 结构_dictionary_entry_t *。注意下划线的区别。

解决此问题的一种方法是与您的下划线保持一致,将 next 声明为:

struct _dictionary_entry_t *next;

但是,我更喜欢一种不同的方式:在声明 struct 之前使用 typedeffing。然后:

typedef struct _dictionary_entry_t dictionary_entry_t;
struct _dictionary_entry_t {
/* ... */
dictionary_entry_t *next;
/* ... */
};

关于c - 从不兼容的指针类型(结构、链表)赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18689345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com