A implementação strcat () funciona, mas causa um dump principal no final

Minha implementação destrcat(char*, const char*) parece funcionar, mas depois causa um dump de núcleo.

strcat() implementação:

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

Código emint main() onde eu chamo strcat ():

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

Na verdade, concatenou as duas cadeias de caracteres e as imprimiu, mas ainda causou um dump de núcleo.

saída:Olá Sr. Smith! Abortado (core despejado)

O que eu fiz errado?

questionAnswers(3)

yourAnswerToTheQuestion