¿Por qué no termina nulo strncpy?

strncpy() Supuestamente protege de desbordamientos de búfer. Pero si evita un desbordamiento sin terminación nula, es probable que una operación de cadena subsiguiente se desborde. Así que para protegerme de esto me encuentro haciendo:

strncpy( dest, src, LEN );
dest[LEN - 1] = '\0';

man strncpy da:

La función strncpy () es similar, excepto que no se copian más de n bytes de src. Por lo tanto, si no hay un byte nulo entre los primeros n bytes de src, el resultado no terminará en nulo.

Sin nulo terminando algo aparentemente inocente como:

   printf( "FOO: %s\n", dest );

... podría estrellarse.

¿Existen alternativas mejores y más seguras parastrncpy()?

Respuestas a la pregunta(11)

Su respuesta a la pregunta