как я понимаю ответ уже был получен но все же если разрешите вставлю свой пятак.
Для изучения языка использовать подход
CityCat4 не очень то правильно так как наверняка не совсем понятно. для изучения списков у вас должна быть подобная структура:
- объявление списка
- функция добавления объекта\элемента в список
- функция для создания объекта\элемента
например
typedef struct s_list
{
char *content;
struct s_list *next;
struct s_list *prev; // если список 2-связный
} t_list;
t_list *lstnew(void const *content) // создаем елемент\объект
{
t_list *obj;
obj = (t_list *)malloc(sizeof(t_list)); // выделяем память
//(можно проверить если выделение не произощло то вернуть NULL)
obj->content = //(копировать, дублировать данные из content)
obj->next = NULL; // инитить указатель на следующий
obj->prev = NULL; // инитить указатель на предыдущий если 2связный
return (obj); // вернуть указатель на созданый елемент\объект
}
void lstadd(t_list **lst, t_list *obj)
{
if (obj)
obj->next = *lst;
*lst = obj;
// только этот вариант не всем подходит так как условий есть много
// например:
// добавить в конец списка
// добавить в начало списка
// добавить по середине списка (и их вариации как в 2 связный или односвязный списки)
// для каждого из них реализация модернизируется а потому и код другой
}
и как итог можно вызвать функцию следующим образом
{
t_list *list;
char *str
//...
list = NULL;
//...
lstadd(&list, lstnew("твоя строка или другой контент"));
}
таким образом ты точно не запутаешься в том что происходит и тебе не понадобится переходить в памяти таким образом как это показали ранее. хотя такой подход в чем то хорош.