La implementación de strcat () funciona pero provoca un volcado de núcleo al final

Mi implementación destrcat(char*, const char*) Parece funcionar pero luego causa un volcado de núcleo.

strcat() implementación:

char* strcat(char* dest, const char* src)
{
    char* tmp = dest;
    while(*tmp) ++tmp ;
    while( (*tmp++ = *src++ ) != '\0') ;
    return (dest);
}

Codificar enint main() donde llamo strcat ():

char arr3[] = "Mr. ";
char arr4[] = "Smith";
printf("Hello %s!", strcat(arr3, arr4));

En realidad, concatenó ambas cadenas y lo imprimió, pero aún así causó un volcado del núcleo.

salida:Hola, Sr. Smith! Abortado (núcleo abandonado)

¿Qué hice mal?

Respuestas a la pregunta(3)

Su respuesta a la pregunta