14.2 为什么 strncpy() 不能总在目标串放上终止符  '\0'

strncpy() 最初被设计为用来处理一种现在已经废弃的数据结构---定长, 不必 '\0' 结束的 ``字符串"。strncpy 的另一个怪癖是它 会用多个 '\0' 填充短串, 直到达到指定的长度。在其它 环境中使用 strncpy() 有些麻烦, 因为你必须经常在目的串末尾手工加  '\0'。

你可以用 strncat 代替 strncpy 来绕开这个问题: 如果目的串开始时为空 (就是说, 如果你先用 *dest = '\0'), strncat() 就可以完成你希望 strncpy() 完成的事情。另外一个方法是用  sprintf(dest, "%.*s", n, source)。

如果需要复制任意字节 (而不是字符串), memcpy() 是个比 strncpy()  更好的选择。

翻译朱群英、孙云, LaTeX2HTML 编译 朱群英 (2005-06-23)