Błąd podczas zapisywania strcat () przy użyciu wskaźników

Próbuję nauczyć się C zThe C programming Language by K&R. Próbuję napisaćstrcat() program używający wskaźników.

char *strcat (char *s, char *t){
    char *d;
    d = s;
    while(*s++);
    s--;
    while(*s++ = *t++);
    return d;
}

int main () {
    char *name1;
    char *name2;
    name1 = "stack" ;
    name2 = "overflow";
    printf("%s %s\n", name1, name2);
    printf("strcat out : %s", strcat(name1, name2));
    return 0;
}

Ale dostaję przepustkę jak

stack overflow
Segmentation fault

Dlaczego to nie działa? Czy ktoś może wyjaśnić błąd tutaj ..

questionAnswers(4)

yourAnswerToTheQuestion