per maggiore chiarezza ecco un esempio che per me è contradditorio ma per voi sicuramente saprete darli una spiegazione

codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Elem {
	long		 val;
	char*		 str;
	struct Elem *next;
} Elem, *List;



int main(void) {
	List L = malloc( sizeof(Elem));
	
	//cosi funziona
	char* a;
	scanf("%s", a);
	printf("%s\n",a );
	
	//cosi non funziona :-(
	scanf("%s", L->str);
	printf("%s\n", L->str );
}
out da terminale:
3@tre ~
$ ./b.exe
ciao
ciao
hotel
Segmentation fault (core dumped)
ps: il primo ciao lo ho scritto io cosi come il primo hotel