Błąd segmentacji - C [duplikat]

To pytanie ma już tutaj odpowiedź:

Awaria lub „błąd segmentacji”, gdy dane są kopiowane / skanowane / odczytywane do niezainicjowanego wskaźnika 4 odpowiedzi

Dlaczego następujący kod powraca z błędem segmentacji? Gdy komentuję linię 7, błąd seg zniknie.

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;
    }

Twoje zdrowie!

questionAnswers(5)

yourAnswerToTheQuestion