strncpy()нібито захищає від переповнення буфера. Але якщо це запобігає переповненню без нульового закінчення, швидше за все, наступна операція рядка буде переповнена. Тож для захисту від цього я роблю:
strncpy( dest, src, LEN );
dest[LEN - 1] = '\0';
man strncpy дає:
strncpy()Функція аналогічна, за винятком того, що не більше ніжnбайтиsrcкопіюються. Таким чином, якщо серед першихnбайтів немає нульового байтаsrc, результат не закінчується нулем.
Без нульового припинення чогось, здавалося б, невинного типу:
printf( "FOO: %s\n", dest );
... може зірватися.
Чи є кращі, безпечніші альтернативи strncpy()?
extern char *strncpy(char * restrict s1, const char * restrict s2, size_t n);'): Функція strncpy () копіює не більше n символів із s2 у s1. Якщо довжина s2 менша за n символів, залишок s1 заповнюється символами `\ 0 '. В іншому випадку s1 не припиняється.