У меня есть 2 структуры, использующие указатели для формирования связанного списка.
typedef struct {
char *text;
int count;
} *Item;
typedef struct node {
Item item;
struct node *next;
} *link;
Я пытаюсь создать кучу операций над этим типом, но у меня много проблем с этой конкретной функцией.
ошибка: запрос элемента «текст» в чем-то, что не является структурой или объединением strcpy(new->item->text, buffer->text);
ошибка: запрос элемента «текст» в чем-то, что не является структурой или объединением new->item->text = (char*) malloc(sizeof(char)*(strlen(buffer->text)+1));
По сути, ошибка связана с проходом buffer->text, но я возился с ним в течение последнего часа и, похоже, не могу найти, что с ним не так. Я, вероятно, упускаю что-то очевидное, но я больше не могу об этом слышать.
link new_item(Item* buffer) {
link new = (link) malloc(sizeof(struct node));
new->item->text = (char*) malloc(sizeof(char)*(strlen(buffer->text)+1));
strcpy(new->item->text, buffer->text);
new->item->count = 1;
new->next = NULL;
return new;
}
.
вместо->
или наоборот. В качестве альтернативы это означает, что LHS ссылки не является ни указателем на структуру, ни структурой; и это ваша проблема здесь. См. Хорошая ли идея указывать указатели typedef - ответ Нет, потому что это приводит к таким проблемам. Переменнаяbuffer
является указателем на указатель на структуру; вам нужно использовать(*buffer)->text
и т. д. Или вам нужно изменить функцию наlink new_item(Item buffer)
. - person Jonathan Leffler   schedule 14.05.2016