От C стандарт:Что такое перекрытие строк в соответствии со стандартом C?
7.21.2.4 strncpy функция
Если копирование происходит между объектами, которые перекрывают друг друга, поведение не определено.
Что перекрывается?
Ясно, что он перекрывается, когда начало целевой строки пересекает конец исходной строки.
Но перекрывается ли это в следующем примере?
const char* dateConst = "2017-01-25";
char* date = malloc(16);
strcpy(date, dateConst);
strncpy(date+4, date+5, 2);
strncpy(date+6, date+8, 3);
printf("%s\n", date);
Выход: 20170125
Если strncpy только copyes символы полукокса на гольца, как это в this implementation, не должно быть никаких проблем.
Хотя это стандарт C, который определяет поведение 'strncpy', вы, кажется, компилируете C++ .. – StoryTeller
' strncpy' является опасной функцией, и ее следует избегать. Он никогда не предназначался для использования с нулевыми завершенными строками. Вместо этого используйте 'memcpy' или' strcpy'. – Lundin
@ Lundin Вау, я этого никогда не слышал. Почему вы рекомендуете 'strcpy' над' strncpy'? (Я всегда слышал наоборот). –