C'de memory alanlarının kopyalanması

11:37
Aşağıda anlatacağım C fonksiyonları bir memory bloğundaki verileri başka bir memory bloğuna kopyalamak için kullanılmaktadır.

memcpy:

memcpy bir memory bloğundaki bilgiyi diğer memory bloğuna fonksiyona geçirilen 3. parametrede geçen değer kadar byte kopyalaması yapar. memory overlap sorununa karşı korumasız durumdadır. Yani source ve destination memory alanlarında üst üste gelme durumu varsa fonksiyon istenilen çıktıları üretememektedir.


Aşağıda örnek bir kod ve çalışması görülmektedir.



 Aşağıda 24 byte kopyalama yapılmıştır. Böylece Null karakter kopyalaması da ptrDest dizisine kopyalanmıştır.





memccpy:

memccpy memcpy ile benzer çalışmakta 3. ve 4. parametreler  ise 3. parametrede karakter olarak gönderilen değerle karşılaşıncaya kadar kopyalama yapar bulamazsa 4. parametre verilen boyuta kadar kopyalama yapar.


  Aşağıdaki örnekte B harfini gönderene kadar ya da maksimum 24 byte kopyalama yapar.



mempcpy:

mempcpy fonksiyonu memcpy ile benzer çalışmakta yalnızca geri dönüş değeri olarak kopyalama işlemi yaptıktan sonra (hedef alana) bir sonraki adresi geri dönüş olarak verir. Bu fonksiyon daha çok birden fazla hafıza alanından birleştirme yaparken kullanılır.


 Örnek bir kullanım aşağıdaki gibidir:





memmove:

memmove memcpy ile benzer yapıdadır. Fakat memory overlap'e karşı önce kaynağı temp bir alana kopyalar ardından hedef olarak verilen yere temp alandan kopyalama yapar. Daha güvenli bir kopyalama sağlar ama memcpy 'ye göre daha yavaştır.


 Örnek bir memmove kullanımı aşağıdaki gibidir:




 Aşağıda memory overlap durumuna bir örnek verilmiştir.





strcpy:

strcpy fonksiyonu ise hedef ve kaynak parametrelerini alır hedefte verilen string'i null karakter görene kadar hedef alana kopyalamaya çalışır. Ya da üçüncü parametre olarak verilen byte kadar kopyalama yapar. Eğer verilen uzunluk dahilinde string içinde Null karakter yoksa kopyalama sonrası hedef alanda sonunda null karakter olmayan bir string olacaktır.


string kopyalama işlemlerinde daha çok strcpy fonksiyonu kullanılmaktadır. Örnek bir uygulama aşağıdaki gibidir:







bcopy:

deprecated olmuş bir fonksiyondur. memcpy ile benze çalışmaktadır. Memory overlap durumuna karşı korumalıdır.


 Örnek bir uygulama: