Allora..
Prima di tutto nella malloc sarebbe corretto passargli la grandezza giusta che deve assumere la stringa..
La malloc è una funzione particolare che permette di riservare dello spazio di memoria per una varioabile o come in questo caso per una stringa.. Però naturtalmente la malloc deve sapere quanto spazio riservare ed è per questo che sizeof(char) non basta perche cosi riserveresti posto per un solo carattere e non una stringa..
Quindi la cosa migliuore sarebbe fare sizeof(char)*100 dove 100 è il numero di posti che ho riservato in memoria per la stringa..
Per quanto riguarda l'acquisizione di una stringa con spazi compresi, puoi usare la funzione gets(stringa).
Questa funzione ti acquisisce una stringa.. al posto di stringa metti la tua stringa.. senza *..

P.s.

La scanf come secondo argomento prende la variabile da riempire.. ma vuole sapere l'indirizzo .. ed è per questo che non devi passare la variabile con l'* ma la devi passare senza..

Dimmi se ti funziona..

ciao ciao