В чем разница между memcpy () и strncpy (), учитывая, что последний может легко заменить первый?
================================================================================================

В чем разница между`memcpy()` а также`strncpy()`? Я спрашиваю это, потому что мы можем легко изменить`strncpy()` скопировать любой тип данных, который мы хотим, а не только символы, просто приведя первые два`char*` аргументы`char*` и изменение третьего аргумента, кратного размеру этого не-символьного типа. В следующей программе я успешно использовал это для копирования части целочисленного массива в другую, и она работает так же хорошо, как и.`memcpy()`

Точно так же мы можем заставить его работать на`float` или другой тип данных. И что'Значительная разница от?`memcpy()`

**PS:** Кроме того, мне интересно, почему`memcpy()` в`string.h` заголовочный файл, учитывая, что почти все функции библиотеки там связаны со строками символов, в то время как`memcpy()` носит более общий характер. Какой-либо причине?

`memcpy()` может копировать данные со встроенными нулевыми символами (так называемый терминатор строки в строках в стиле C), тогда как`strncpy()` будет только скопировать строку с максимальным количеством заданных символов или положением первого нулевого символа (и дополнит остальные строки 0).

Другими словами, у них есть два очень разных варианта использования.



 полезно использовать memcpy и данные в строке for strncpy имеют смысл ввиду естественного преимущества '\ 0' завершенная строка. В противном случае оба выполняют один и тот же шаблон копирования после выполнения.



Возьмем для примера эти числа в вашем массиве:

Младший значащий байт первого числа`brr[0]` является (`0``512` является`0x200`) что будет причиной1) `strncpy` прекратить копирование.`strncpy` не копирует символы, следующие за нулевым символом.

1) Чтобы быть педантичным (см. Комментарии), это выполняется при условии, что реализация имеет.`sizeof (int) > 1`