Ti da errore perchè quando utilizzi i puntatori devi allocare lo spazio di memoria.
Quando dichiari un puntatore (*p per intenderci) dichiare solo un indirizzo, lo spazio lo devi allocare:

la funzione malloc() è quella che ti interessa

#include <stdio.h>
#include <stdlib.h> // questa e' la libreria di malloc

int main(void)
{
char *str;
int n; // numero di caratteri da allocare

str=(char *)malloc(n*sizeof(char));
if (str==NULL)
{
printf("\nErrore allocazione!\n");
exit(1);
}

printf("\nInserisci una stringa: ");
scanf("%s",str);
printf("\nHai inserito la stringa: %s\n");

return 0;
}

P.S.
Ho scritto scanf perchè era stato chiesto come utilizzare scanf, poi è normale che per le stringhe conviene usare fgtes e non gets (che non ècompatibile con tutte le piattaforme).
Ciao!!!!:quote: