strncpy is my least favorite C function. Not terminating with NULL when the destination length is exhausted is bad enough. But when you give it a large enough buffer, it wastes cycles padding the destination with NULLs to the full length. If that's what I wanted I'd have just called memset ahead of time!
I ended up getting in the (probably bad) habit of using strlen+memcpy for all my string management needs. That is, until I realized I shouldn't be wasting my time with such tedious bit-twiddling and moved on to C++ with std::string.