我正在尝试保存动态数组索引的地址。该函数的最后一行是指针错误。
static struct sstor *dlist
struct node *ins_llist(char *data, struct llist *l) {
struct node *p, *q;
q = malloc((size_t)sizeof(struct node));
if(q == NULL)
return(NULL);
if(ins_list(data, &dlist))
return NULL;
q->item = &(dlist->item[(dlist->sz)-1]); // Problem?
...}
dlist的分配
struct llist *init_llist(void) {
struct llist *l;
dlist = init_list(INITSZ);
if(dlist == NULL)
return(NULL);
这是我的节点
struct node {
char **item;
struct node *next;
struct node *prev;
};
这是我的数组
struct sstor {
int sz;
int maxsz;
char item[][1024];
};
我还是新手。下面的行给出了错误:从不兼容的指针类型分配
q->item = &(dlist->item[(dlist->sz)-1]);
答案 0 :(得分:2)
char**
与char[][1024]
尝试修复sstor
结构,如下所示:
struct sstor {
int sz;
int maxsz;
char *item[1024];
};
答案 1 :(得分:2)
假设您为struct node
分配实际q
以指向...
出现“不兼容的指针类型”错误,因为q->item
具有类型char **
(指向char的指针),&(dlist->item[...])
具有类型char (*)[1024]
(指针)到一个1024 char的数组)。这些类型根本不兼容(是没有实际的“指向char的对象”指针q->item
指向)。
您可以通过两种方式解决问题。第一种方法是将struct node
的声明更改为:
struct node {
char (*item)[1024];
struct node *next;
struct node *prev;
};
第二种方法是将struct node
的声明改为:
struct node {
char *item;
struct node *next;
struct node *prev;
};
..并将赋值语句更改为:
q->item = dlist->item[(dlist->sz)-1]; // No Problem!
(第一个替代方案使q->item
指向整个数组,第二个使得它指向数组中的第一个char
。明确指出这些是指向同一位置的指针,但是有不同的类型。通常,第二种形式是你想要的。