Ho provato come dicevi te bersan. Ci siamo quasi però.

Nel senso che il comando ruota sinistra o ruota destra non deve stampare niente, è sempre il comando 'p' (da ricordare che al comando p è assegnata una funzione)che mi stampa la matrice.
Quindi le 2 funzioni ruota(sinis o dest) mi devono salvare solo in **matrice quella nuova modificata, e poi col comando p stamparla.

Qui di seguito scrivo una delle 2 funzioni che ho fatto: (ovviamente va tenuta in considerazione la funzione con malloc del mio primo messaggio)

void ruota(int n, char **p){
int i, j;
for(i=0;i<n;i++){
for(j=0; j<n ;j++)
p[i][j]=p[j][n-1-i];
}
}

Purtroppo però sembra non andar bene in quanto la matrice che mi stampa non me la ruota.