Buon pomeriggio a tutti, ho cominciato da poco a studiare il linguaggio C e trovo una difficoltà per me al momento insormontabile nello scambiare due stringhe formate da una sola parola ciascuna senza caratteri particolari

Il codice seguente non da alcun errore di compilazione ma al momento dell'esecuzione le due parole vengono stampate soltanto che risultano combinazioni strane che non riesco a spiegare.
Per essere più chiaro se immetto da tastiera le parole:
Marco Andrea
dovrei ottenere:

Andrea Marco

ma ciò che spunta è:

Andrmarcea e Marcea

Come è possibile una cosa del genere? Non ci dormo sopra

codice:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){

  struct studenti{
         char *nome;
}studente[2];
char *temp;
temp = malloc(50*sizeof(char));


scanf("%s",&studente[1].nome); 
scanf("%s",&studente[2].nome); 

temp = studente[1].nome;

studente[1].nome = studente[2].nome;

studente[2].nome = temp;

printf("\n\n%20s %20s\n\n",&studente[1].nome,&studente[2].nome);

    system("PAUSE");	
  return 0;
}
Spero che qualcuno più esperto di me possa trovare cosa non va in questo codice elementare.