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)