Предполагается, что вы выделите фактическую struct node
для q
, чтобы указать на ...
Ошибка «несовместимые типы указателей» возникает из-за того, что q->item
имеет тип char **
(указатель на указатель на символ), а &(dlist->item[...])
имеет тип char (*)[1024]
(указатель на массив из 1024 символов). Эти типы просто несовместимы (там - это фактического объекта "указатель на символ", на который 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
в массиве. Перспективные заметят, что это указатели на одно и то же местоположение, но с разными типами Обычно вторая форма - это то, что вы хотите).