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!