В чем разница между memcpy () и strncpy (), учитывая, что последний может легко заменить первый?
В чем разница междуmemcpy()
а такжеstrncpy()
? Я спрашиваю это, потому что мы можем легко изменитьstrncpy()
скопировать любой тип данных, который мы хотим, а не только символы, просто приведя первые дваchar*
аргументыchar*
и изменение третьего аргумента, кратного размеру этого не-символьного типа. В следующей программе я успешно использовал это для копирования части целочисленного массива в другую, и это работает так же хорошо, какmemcpy()
.
#include <stdio.h>
#include <string.h>
int main ()
{
int arr[2]={20,30},brr[2]={33,44};
//memcpy(arr,brr,sizeof(int)*1);
strncpy((char*)arr,(char*)brr,sizeof(int)*1);
printf("%d,%d",arr[0],arr[1]);
}
Точно так же мы можем заставить его работать наfloat
или другой тип данных. Так в чем же отличие отmemcpy()
?
PS: Кроме того, мне интересно, почемуmemcpy()
вstring.h
заголовочный файл, учитывая, что почти все функции библиотеки там связаны со строками символов, в то время какmemcpy()
носит более общий характер. Любая причина?