Custom strcat() with different arguments
char* cat(char *dest, char *a, char*b)


Interface critique: You should have the caller specify a maximum size for the destination buffer, and error out when there is not enough space.  The mark of a good C programmer is to create interfaces which make this sort of condition unambiguous, rather than blasting away on the buffer, potentially past the allocation size.

for(i = 0; i &lt; len_a; i++)
{
    dest[i] = a[i];
}


Strictly speaking this is fine, but it is rather un-C-like.  I would prefer:

while (*a)
   *dest++ = *a++;


With this you do not need to call strlen, either.

Assuming you added the parameter you should add in my interface critique (let's call the new parameter destsz), you could make sure you don't write more than this size with something like:

int cat(char *dest, size_t destsz, const char *a, const char *b)
{
    while (*a &amp;&amp; destsz)
    {
       *dest++ = *a++;
       --destsz;
    }

    while (*b &amp;&amp; destsz)
    {
       *dest++ = *b++;
       --destsz;
    }

    if (!destsz)
       return -1; // ran out of buffer; error condition

    *dest = 0;   // we have space, so write NUL
    return 0;
}