Fn strncpy 関数は、 Fa len 個以上の文字は Fa dst にコピーせず、 Fa src の長さが Fa len 文字以下の場合には `\0' 文字を追加します。また、 Fa src の長さが Fa len 文字以上である場合は、 Fa dst を終了させません。
char chararray[6]; (void)strncpy(chararray, "abc", sizeof(chararray));
次の行は、 chararray を ``abcdef '' に設定します :
char chararray[6]; (void)strncpy(chararray, "abcdefgh", sizeof(chararray));
パラメータの長さが、ソースの長さと同じか それ以上であるため chararray は NUL で終了しない ことに注意してください。
次の行は、 input から buf へ文字を適切にコピーし、 その結果を NUL で終了させます。 Fn strncpy の文字列自体が NUL で終了することを 保証しないためで、 これは明確にしなければなりません。
char buf[1024]; (void)strncpy(buf, input, sizeof(buf) - 1); buf[sizeof(buf) - 1] = '\0';
次の例のように strlcpy(3) を使用すると、より良く実行できるかもしれません。
"(void)strlcpy(buf, input, sizeof(buf));"
strlcpy(3) は標準的には定義されていないので、 移植に無関係なときだけ 利用するように注意してください。