remove most occurences of strcpy/strcat

those functions are insecure and in the case of strcat even slow,
since the strlen has to be checked on each call.
they are considered a code-smell; instead, snprintf should be used.

snprintf(buf, sizeof buf, "%s", mystring) is the only way offered
by C99 to do a bounds-checked copy of a string (and after parsing
the format string (which should only take a handful of cycles),
performance is identical to a naive strcpy implementation using
a for loop until 0 is hit).

note that strncpy() always fills the entire buffer, so it is a
performance hog.