il motivo per cui non funziona è che fai un passaggio per valore del puntatore, p nel main non viene modificato e probabilmente non punta a niente di utile.
puoi passare p per riferimento o ritornare il valore ritornato da calloc, per assegnare tale valore a p nel main
comunque trovo più sensato che una funzione che si chiama "scrivi" non allochi, ma scriva
inoltre dovresti controllare che calloc non abbia ritornato NULL per verificare se c'è stato un errore