13.1为什么strncpy()不能总在目标串放上终止符’\0’?
strncpy() 最初被设计为用来处理一种现在已经废弃的数据结构——定长, 不 必’n0’ 结束的“字符串”。strncpy 的另一个怪癖是它会用多个’\0’ 填充短串, 直到 达到指定的长度。在其它环境中使用strncpy() 有些麻烦, 因为你必须经常在目的 串末尾手工加’\0’。
你可以用strncat 代替strncpy 来绕开这个问题: 如果目的串开始时为空(就 是说, 如果你先用*dest = ’n0’), strncat() 就可以完成你希望strncpy() 完成的事 情。另外一个方法是用sprintf(dest, "%.*s", n, source)。 如果需要复制任意字节(而不是字符串), memcpy() 是个比strncpy() 更好的 选择。
你可以用strncat 代替strncpy 来绕开这个问题: 如果目的串开始时为空(就 是说, 如果你先用*dest = ’n0’), strncat() 就可以完成你希望strncpy() 完成的事 情。另外一个方法是用sprintf(dest, "%.*s", n, source)。 如果需要复制任意字节(而不是字符串), memcpy() 是个比strncpy() 更好的 选择。