Ответы Mail.ru: Ответ на вопрос "Strncpy не ставит NULL в конце массива если на хватает места"

Как вы заметили, strncpy не гарантирует, что результирующая строка будет завершена нулем, если длина копируемой строки (source) равна или больше размера целевого буфера (destination). Вместо этого она просто копирует указанное количество символов, что может привести к переполнению буфера и отсутствию завершающего нуля.

Исторически, strncpy была предназначена для работы с фиксированными структурами данных, где размер строки был известен заранее. В таких случаях завершающий нуль не требовался, а основная цель была скопировать точное количество символов.

Чтобы избежать проблем, связанных с отсутствием завершающего нуля, необходимо вручную добавить его после использования strncpy, если размер целевого буфера достаточен:

 char t[3]; 
strncpy(t, "1234567890", 2); 
t[2] = '\0'; // Добавляем завершающий нуль вручную 
printf("%s\n", t);