Короткий ответ: вы не сохраняете свой недавно созданный список таким, каким вы его думаете, поэтому, когда вы приходите его печатать, вы печатаете мусор.
int main(){
char_list nuovo; // <--- uninitialised pointer
char nome[] = "Ugo";
makesList(nuovo, nome); // <--- not storing return value
if(nuovo != NULL)
viewList(nuovo); // <--- printing some random memory, not your new list
return 0;
}
Если вы измените на:
char_list nuovo = NULL;
...
nuovo = makesList(nuovo, nome);
Вы должны найти, что это работает так, как вы ожидаете, но стоит немного подумать о том, действительно ли вы хотите, чтобы это работало таким образом.
Похоже, вы надеялись, чтоnuovo
был волшебным образом обновлен функцией, но для этого вам нужно будет передать на нее указатель (... и это другое обсуждение!).
Наконец, как указал @Barmar, typedef
использование указателей - это плохая привычка, и тем более легко оставлять их неинициализированными, как и вы, просто потому, что они не выглядят как указатели.