strncpy, when used as designed, can leave the target array without a terminating null character. Using that array later with any string function causes undefined behavior.
strcpy, when used as designed, always leaves the target array properly null-terminated. Using it properly is a bit more difficult; you have to make sure the target array is big enough to hold the source string.
That being said; it is a safer alternative to strcpy, but it seems like it isn't the safest alternative to strcpy.