Есть две проблемы с strcat. Во-первых, вы должны выполнить всю свою проверку вне функции, выполняя работу, почти аналогичную функции:
if(pDest+strlen(pDest)+strlen(pScr) < destSize)
Вы должны пройтись по всей длине обеих строк, просто чтобы убедиться, что они подойдут, прежде чем идти вниз по всей длине СНОВА, чтобы сделать копию. Из-за этого многие программисты просто предполагают, что он подойдет и пропустят тест. Хуже того, может случиться так, что когда код впервые написан, он ГАРАНТИРУЕТСЯ для подгонки, но когда кто-то добавляет другую strcat или изменяет размер буфера или константу где-то еще в программе, у вас теперь есть проблемы.
Другая проблема, если pSrc и pDst перекрываются. В зависимости от вашего компилятора strcat вполне может быть простым циклом, который проверяет символ за раз на 0 в pSrc. Если pDst перезапишет это 0, то вы попадете в цикл, который будет выполняться до сбоя вашей программы.