codice:
scanf("%s",&p);
scanf si aspetta semplicemente il puntatore all'area di memoria che deve riempire e non l'indirizzo del puntatore

EDIT
no.. cavolata.. va bene lo stesso (finché p è un array e non un puntatore)