Both functions append to an existing memory array instead of returning a new string that contains the concatenation. Generally, returning a new string is more convenient, but it is impossible if you work with character arrays.

The strcat function does not check whether it exceeds the target array's capacity. The strncat function can be used instead, but it is cumbersome to compute the maximum number of characters to copy, and even more cumbersome to deal with the 0 terminator. The + operator simply allocates a string of the correct size.