Falla de segmentación - C [duplicado]

Esta pregunta ya tiene una respuesta aquí:

Fallo de "caída" o "segmentación" cuando los datos se copian / escanean / leen en un puntero no inicializado 4 respuestas

¿Por qué el siguiente código regresa con una falla de segmentación? Cuando comento fuera de la línea 7, la falla de seg desaparece.

int main(void){
      char *s;
      int ln;
      puts("Enter String");
      // scanf("%s", s);
      gets(s);
      ln = strlen(s); // remove this line to end seg fault
      char *dyn_s = (char*) malloc (strlen(s)+1); //strlen(s) is used here as well but doesn't change outcome
      dyn_s = s;
      dyn_s[strlen(s)] = '\0';
      puts(dyn_s);
      return 0;
    }

¡Aclamaciones!

Respuestas a la pregunta(5)

Su respuesta a la pregunta