У меня есть список, как это:обновление списка с функцией (без возвращаемого значения)
typedef struct list {
char *key;
char *value;
struct list *next;
} List;
И использовать его в своей основной функции:
main(int argc, char *argv[]) {
List *list;
list = malloc(sizeof(struct list));
list = insertToList("key", "value", list);
}
insertToList является:
List insertToList(char *key, char *value, List *list) {
List *newNode = malloc(sizeof(struct list));
newNode->key = malloc(strlen(key));
strcpy(newNode->key, key);
newNode->value = malloc(strlen(value));
strcpy(newNode->value, value);
newNode->next = list;
list = newNode;
return list;
}
Это работает так, как ожидалось, но я хотел бы изменить список, указав вместо этого указатель, так что мне не нужно возвращать список. Я попытался передать список & в качестве аргумента insertToList, а затем получить его с ** списком, но это не сработало. Как мне это сделать?
Что вы подразумеваете под «что не работает» для списка **? Что случилось, когда вы пробовали этот подход? – Derek
ваш 'newNode-> key = malloc (strlen (ключ)); strcpy (newNode-> key, key); 'сломан и может вызвать переполнение, потому что вы не выделяете место для трейлинга' '\ 0''. Используйте 'newNode-> key = strdup (key)' – ensc