Доступ к аргументам функции извне. Возможно ли?
Даны функции и структура:
typedef struct s_list
{
void *content;
struct s_list *next;
} t_list;
t_list *ft_lstnew(void *content); // создает новый элемент списка;
void ft_lstadd_back(t_list **lst, t_list *new);// добавляет элемент в конец списка;
t_list *ft_lstlast(t_list *lst); // возвращает указатель на последний элемент списка;
int get_next_line(int fd, char **line); //записывает в строку по данному адресу следующую строку, считанную (например) с файла до '\n' включительно;
Я хочу получать новые строки и сразу же их записывать во вновь созданный новый элемент списка. Но не знаю как это сделать в одну строку.
Далее - ход моих размышлений.
Казалось бы можно так:
get_next_line(fd, (char**)&(mylist->content));
Но при mylist == NULL - не выйдет. Получается нужно создать новый элемент и записать уже в него:
get_next_line(fd, (char**)&(ft_lstnew(NULL)->content));
- тоже не то - так как я теряю адрес этого нового элемента.
Пойдем дальше:
get_next_line(fd, (char**)&(mylist = ft_lstnew(NULL))->content));
Здесь похоже на правду, но все же это не элемент списка, а структура.
И вот тут я в затруднительном положении. Мне не удается вызвать void-функцию ft_lstaddback(&head, ft_lstnew(NULL)); и извлечь из нее адрес последнего элемента.
Отсюда и вопрос - есть ли возможность извлечь адрес аргумента извне void-функции?
Ответы (1 шт):
Скорее всего так:
s_list *mylist = 0, *last = 0;
get_next_line(
fd,
(char*)(
last
? (ft_lstaddback(last, last = ft_lstnew(0)), last)
: (mylist = last = ft_lstnew(0))
)->content)
);