Error al escribir strcat () usando punteros

Estoy tratando de aprender C conThe C programming Language by K&R. Estoy tratando de escribir unstrcat() Programa utilizando punteros.

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

Pero estoy recibiendo la salida como

stack overflow
Segmentation fault

¿Por qué no funciona? ¿Alguien puede aclarar el error aquí ...

Respuestas a la pregunta(4)

Su respuesta a la pregunta