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 не припиняється.