问为什么strncpy并不总是在目标字符串中放置一个'\0'终止符?
答 strncpy最初是为了处理一种现已过时的 C 语言数据结构而设计的,即定长、不一定\0-终止的“字符串”。[脚注]strncpy在其他上下文中,使用起来确实有点麻烦,因为你经常必须手动'\0'向目标字符串添加一个
你可以通过改用strncat来解决这个问题,而不是strncpy。如果目标字符串最初是空的(即,如果你先执行*dest = '\0'),strncat将实现你可能想要strncpy实现的功能
*dest = '\0'; strncat(dest, source, n);此代码复制最多n个字符,并始终附加一个\0.
另一种可能性是
sprintf(dest, "%.*s", n, source)(尽管严格来说,这仅保证在n <= 509).
复制任意字节(而不是字符串)时,memcpy通常是比strncpy.