Нет, они не одинаковы.
Из стандарта C (ISO / IEC 9899: 1999 (E))
7.21.2.3 Функция strcpy
Описание
2 Функция strncpy копирует не более n символов (символов, следующих за нулем)
символ не копируется) из массива, на который указывает s2, в массив, на который указывает s1.260) Если копирование происходит между перекрывающимися объектами, поведение не определено.
3 Если массив, на который указывает s2, является строкой, которая короче, чем n символов, нулевые символы добавляются к копии в массиве, на который указывает s1, до тех пор, пока все n символов не будут записаны.
Возвращает
4 Функция strncpy возвращает значение s1.
7.21.2.1 Функция memcpy
Описание
2 Функция memcpy копирует n символов из объекта, на который указывает s2, в объект, на который указывает s1. Если копирование происходит между объектами, которые перекрываются, поведение не определено.
Возвращает
3 Функция memcpy возвращает значение s1.
при использовании memcpy()
исходный и целевой буферы могут перекрываться, в то время как в strncpy()
этого не должно происходить.
В соответствии со стандартом C поведение перекрывающихся буферов не определено как для strncpy()
, так и memcpy()
.
В соответствии со стандартом C реальная разница между strncpy()
и memcpy()
заключается в том, что если исходная строка меньше значения N, то к остальному количеству N добавляются NULL-символы.
memcpy()
более эффективен, но менее безопасен, так как он не проверяет источник на наличие количества N для перемещения в целевой буфер.