memcpy
, wmemcpy
Menyalin byte antar buffer. Versi yang lebih aman dari fungsi-fungsi ini tersedia; lihat memcpy_s
, wmemcpy_s
.
Sintaks
void *memcpy(
void *dest,
const void *src,
size_t count
);
wchar_t *wmemcpy(
wchar_t *dest,
const wchar_t *src,
size_t count
);
Parameter
dest
Buffer baru.
src
Buffer untuk disalin.
count
Jumlah karakter yang akan disalin.
Nilai hasil
Nilai dari dest
.
Keterangan
memcpy
count
menyalin byte dari src
ke dest
; wmemcpy
menyalin count
karakter lebar. Jika wilayah sumber dan tujuan tumpang tindih, perilaku memcpy
tidak terdefinisi. Gunakan memmove
untuk menangani wilayah yang tumpang tindih.
Penting
Pastikan bahwa buffer tujuan cukup besar untuk mengakomodasi jumlah karakter yang disalin. Untuk informasi selengkapnya, lihat Menghindari overruns buffer.
Penting
Karena begitu banyak buffer overruns, dan dengan demikian potensi eksploitasi keamanan, telah ditelusuri untuk penggunaan memcpy
yang tidak tepat , fungsi ini tercantum di antara fungsi "dilarang" oleh Siklus Hidup Pengembangan Keamanan (SDL). Anda dapat mengamati bahwa beberapa kelas pustaka VC++ terus menggunakan memcpy
. Selain itu, Anda dapat mengamati bahwa pengoptimal kompilator VC++ terkadang memancarkan panggilan ke memcpy
. Produk Visual C++ dikembangkan sesuai dengan proses SDL, dan dengan demikian penggunaan fungsi terlarang ini telah dievaluasi dengan cermat. Dalam kasus penggunaan pustaka, panggilan telah diteliti dengan hati-hati untuk memastikan bahwa buffer overruns tidak akan diizinkan melalui panggilan ini. Dalam kasus pengkompilasi, kadang-kadang pola kode tertentu dikenali sebagai identik dengan pola memcpy
, dan dengan demikian diganti dengan panggilan ke fungsi. Dalam kasus seperti itu, penggunaannya memcpy
tidak lebih tidak aman daripada instruksi asli; mereka hanya dioptimalkan untuk panggilan ke fungsi yang disetel memcpy
performa. Sama seperti penggunaan fungsi CRT "aman" tidak menjamin keamanan (mereka hanya membuatnya lebih sulit untuk menjadi tidak aman), penggunaan fungsi "dilarang" tidak menjamin bahaya (mereka hanya memerlukan pengamatan yang lebih besar untuk memastikan keamanan).
Karena memcpy
penggunaan oleh pengkompilasi dan pustaka VC++ telah diteliti dengan cermat, panggilan ini diizinkan dalam kode yang jika tidak sesuai dengan SDL. memcpy
panggilan yang diperkenalkan dalam kode sumber aplikasi hanya sesuai dengan SDL ketika penggunaan tersebut telah ditinjau oleh pakar keamanan.
Fungsi memcpy
dan wmemcpy
hanya tidak digunakan lagi jika konstanta _CRT_SECURE_DEPRECATE_MEMORY
ditentukan sebelum #include
pernyataan, seperti dalam contoh berikut:
#define _CRT_SECURE_DEPRECATE_MEMORY
#include <memory.h>
or
#define _CRT_SECURE_DEPRECATE_MEMORY
#include <wchar.h>
Persyaratan
Rutin | Header yang diperlukan |
---|---|
memcpy |
<memory.h> atau <string.h> |
wmemcpy |
<wchar.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
Lihat memmove
untuk sampel cara menggunakan memcpy
.
Lihat juga
Manipulasi buffer
_memccpy
memchr
, wmemchr
memcmp
, wmemcmp
memmove
, wmemmove
memset
, wmemset
strcpy_s
, , wcscpy_s
_mbscpy_s
strncpy_s
, , _strncpy_s_l
wcsncpy_s
, _wcsncpy_s_l
, , _mbsncpy_s
,_mbsncpy_s_l