Originariamente inviato da Rudie
Quello che ho postato sopra funziona però vorrei prendere i dati dalla tastiera.

codice:
void fill_student(int student_at_index) {

     char tmp;

     printf("Inserisci studente\n");
     printf("Nome? ");             
     scanf("%s", &tmp);
     
    strcpy(studenti[student_at_index].nome, tmp); 
    studenti[student_at_index].cognome = "Caio";
    studenti[student_at_index].matricola = student_at_index;
    studenti[student_at_index].laurea = "triennale";
    studenti[student_at_index].indirizzo.via = "Roma";
    studenti[student_at_index].indirizzo.numero = 20;
    studenti[student_at_index].indirizzo.cap = 20215;
    studenti[student_at_index].indirizzo.citta = "Milano";

}
Con quel codice leggi un solo carattere (o meglio, puoi leggere solo un carattere).
Devi allocare un'array piu' grande (che deve comprendere il carattere terminatore), e devi allocarlo dinamicamente (con malloc e free) perchè altrimenti al ritorno da quella funzione l'array viene deallocato. E poi comunque attento perchè scanf considera come carattere di fine inserimento anche lo spazio, quindi dovresti fare una chiamata per inserire il nome ed una per il cognome.