Bildirim
void* memcpy(void *dest, const void *src, size_t n);
void* memcpy(void *restrict dest, const void *restrict src, size_t n); (C99)
errno_t memcpy_s(void *restrict dest, rsize_t destsz, const void *restrict src, size_t n); (C11)
Açıklama
Src parametresi ile gösterilen bellek bölgesindeki karakterleri, n parametre değeri kadar uzunlukta, dest parametresindeki bellek bölgesine kopyalar.
memcpy_s() fonksiyonunda ayrıca, aşağıdaki hatalar çalışma zamanında algılanır ve tüm hedef aralığının [dest, dest+destsz) sıfırlanmasına neden olur (dest ve destsz parametre değerleri geçerliyse) ve yüklenmiş olan kısıtlayıcı işlem fonksiyonu çağrılır:
Parametreler
dest: Src parametresindeki verilerin kopyalanacağı belleği gösteren işaretçidir.
src: Dest parametresine kopyalanacak karakterlerin bellek başlangıcını gösteren bir işaretçidir.
n: Kopyalanacak maksimum karakter sayısıdır.
destsz: Dest parametresinde değiştirilecek maksimum byte sayısıdır.
Dönüş değeri
Memcpy() fonksiyonu dest parametre değerini geri döndürür.
Memcpy_s() fonksiyonu başarı durumunda 0 değerini, hata durumunda sıfır olmayan değer geri döndürür. Hata durumunda ayrıca, dest NULL bir işaretçi değilse ve destsz geçerli bir değerse, dest ile gösterilen bellek bölgesine destsz kadar sıfır değeri yazar.
Örnek
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
const char *cp = "Bilgisayar&Programlama";
char dest[40];
memset(dest, '\0', 40);
memcpy(dest, cp, 40);
printf("%s\n", dest);
memset(dest, '\0', 40);
memccpy(dest, cp, '&', 40);
printf("%s", dest);
return 0;
}
Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar.
Bilgisayar&Programlama Bilgisayar&
Program önce bir karakter dizisi içindeki karakterlerin tamamını memcpy() fonksiyonu ile bir karakter dizisine kopyalayarak ekrana yazar. Sonra, aynı karakter dizisindeki karakterlerin & karakterine kadar olanlarını, bu karakter de dahil olmak üzere, bir karakter dizisine kopyalayarak ekrana yazar.
Kaynak kodu
Copyright Public domain
void *memcpy(void *dest, const void *src, size_t n)
{
char *d = dest;
const char *s = src;
while(n--)
*d++ = *s++;
return dest;
}