Visto che "a te funziona in tutte e due i casi" scrivi il codice funzionante...
Per quanto riguarda il riempimento del vettore di strutture utilizzando la notazione char *s (puntatore a char) non permette il riempimento "corretto" dei campi della struttura, cosa che non accade utilizzando la notazione char s[200] (vettore di char, che è un puntatore all'indirizzo base del vettore); per quanto riguarda il secondo caso l'ordinamento tramite l'algoritmo del bubblesort funziona solamente se si usa la notazione char *s e non char s[200].
codice:
void sort(Studente s[], int dim)
{
    Studente temp;
    int i, ordinato=0;

    while(!ordinato)
    {
        dim--;
        ordinato=1;
        for(i=0;i< dim;i++)
            if(strcmp(s[i].cognome,s[i+1].cognome)>0)
            {
                temp.nome=s[i].nome; //incompatible types when assigning to type ‘char[200]’ from type ‘char *’
                temp.cognome=s[i].cognome;
                temp.matricola=s[i].matricola;
                temp.iscrizione=s[i].iscrizione;
                s[i].nome=s[i+1].nome;
                s[i].cognome=s[i+1].cognome;
                s[i].matricola=s[i+1].matricola;
                s[i].iscrizione=s[i+1].iscrizione;
                s[i+1].nome=temp.nome;
                s[i+1].cognome=temp.cognome;
                s[i+1].iscrizione=temp.iscrizione;
                s[i+1].matricola=temp.matricola;
                ordinato=0;
            }
    }
e cmq dato che sono nuovo del forum potresti spostare la discussione dato che non ne sono capace