Non puoi usarlo in quel modo perchè tu hai dichiarato il puntatore ma esso non punta ancora a nulla. quando tu fai la return new e dal main scrivi:
main(){
struct nodo *inizio; //dichiri un puntatore a struct nodo
//qui inizio non punta a nulla quindi non puoi accedere al campo di una struttura che non esiste
inizio = creanodo(); //adesso inizio punta al nodo!!
...
}
Capito? Il puntatore è una cosa, la struct nodo un'altra. Il puntatore tiene solo un indirizzo di memoria mentre la struttura puntata è ciò che c'è dentro a quell'indirizzo di memoria. Facendo "puntatore->info" fai la stessa cosa che faresti a fare (*puntatore).info.
*puntatore è il puntatore dereferenziato(cioè proprio la variabile stuct nodo) e con .info accedi ad un campo della struttura. E una cosa non troppo banale. Anch'io facevo il tuo errore ma è sempre la stessa cosa! Tipo anche per copiare una struttura:
struct nodo *inizio, *nuovo;
inizio = creanodo();
nuovo = inizio; //così i 2 puntatiri puntano alla stessa struttura(sono due indirizzi uguali)
//per fare una copia dell'intera stuttura devi fare così
nuovo->info = inizio->info;
nuovo->next = inizio->next;
Beh comunque stavo solo cercando di farti capire meglio.
Ora..
Quello che volevi fare tu con struct nodo *inserisci è inserire ogni volta un elemento in coda alla lista che è abbastanza facile! Una cosa che ha sbagliato è che oltre a passare alla funzione la stringa con cui riempire il campo info devi anche passare il puntatore alla testa della lista a cui vuoi attaccare il nuovo nodo.
void inserisci(char stringa[], nodo *inizio){
struct nodo *nuovo = creanodo(); //nuovo punta al nodo appena creato
strcpy(nuovo->info,stringa); //riempi il campo info del nodo appena creato
while(inizio != NULL){
inizio = inizio->next
}
//a questo punto sei alla fine della lista dove il campo next dell'ultimo nodo è = NULL
//nota che se inizio era uguale a NULL non entravi nemmeno nel ciclo quindi in questo modo non
//ti serve distinguere più casi
inizio = nuovo; //attacchi il nodo creato in coda alla lista
}
Ho fatto una funzione void perchè non ti serve ritornare nulla! Il puntatore passato nel main non cambia perchè è stato passato per valore, e quando scorrerai la lista troverai anche l'ultimo nodo attaccato.
Tutto chiaro o c'è ancora qualche problema?