strncpy

strncpy permite definir un tamaño máximo para evitar un buffer overflow pero hay que saber usarla!

char buf[30];
strcpy(buf, otherbuf);  // posible overflow

strncpy(buf, otherbuf, sizeof(otherbuf));   // ridículo, por que?

strncpy(buf, otherbuf, sizeof(buf)); // evitamos el overflow pero...

…pero, si otherbuf es mas grande que buf, con strncpy evitamos el overflow pero strncpy no pone un '\0' en el buffer por lo que si usamos este seguro terminaremos con un overrun (leemos fuera del buffer).

Lo mas seguro es poner un cero explícito:

strncpy(buf, otherbuf, sizeof(buf)); // evitamos el overflow y...
buf[sizeof(buf)-1] = 0; // y nos aseguramos que termine en un \0

Y ya esta? No. Recordá que strncpy evitamos el overflow, con el 0 evitamos el overrun pero al final tendremos un dato truncado en buf.

Puede que buf te sirva o no así que tenlo en cuenta!