memcpy_s, wmemcpy_s

Menyalin byte antar buffer. Fungsi-fungsi ini adalah versi memcpy, wmemcpy dengan peningkatan keamanan seperti yang dijelaskan dalam Fitur keamanan di CRT.

Sintaks

errno_t memcpy_s(
   void *dest,
   size_t destSize,
   const void *src,
   size_t count
);
errno_t wmemcpy_s(
   wchar_t *dest,
   size_t destSize,
   const wchar_t *src,
   size_t count
);

Parameter

dest
Buffer baru.

destSize
Ukuran buffer tujuan, dalam byte untuk memcpy_s dan karakter lebar (wchar_t) untuk wmemcpy_s.

src
Buffer untuk disalin.

count
Jumlah karakter yang akan disalin.

Nilai hasil

Nol jika berhasil; kode kesalahan pada kegagalan.

Kondisi kesalahan

dest destSize src count Nilai hasil Isi dari dest
any any any 0 0 Tidak dimodifikasi
NULL any any bukan nol EINVAL Tidak dimodifikasi
any any NULL bukan nol EINVAL dest nol keluar
any < count any bukan nol ERANGE dest nol keluar

Keterangan

memcpy_scount menyalin byte dari src ke dest; wmemcpy_s menyalin count karakter lebar. Jika wilayah sumber dan tujuan tumpang tindih, perilaku memcpy_s tidak terdefinisi. Gunakan memmove_s untuk menangani wilayah yang tumpang tindih.

Fungsi-fungsi ini memvalidasi parameternya. Jika count bukan nol dan dest atau src merupakan penunjuk null, atau destSize lebih kecil dari count, fungsi ini memanggil handler parameter yang tidak valid, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, fungsi-fungsi ini mengembalikan EINVAL atau ERANGE, dan diatur errno ke nilai yang dikembalikan.

Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.

Persyaratan

Rutin Header yang diperlukan
memcpy_s <memory.h> atau <string.h>
wmemcpy_s <wchar.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

// crt_memcpy_s.c
// Copy memory in a more secure way.

#include <memory.h>
#include <stdio.h>

int main()
{
   int a1[10], a2[100], i;
   errno_t err;

   // Populate a2 with squares of integers
   for (i = 0; i < 100; i++)
   {
      a2[i] = i*i;
   }

   // Tell memcpy_s to copy 10 ints (40 bytes), giving
   // the size of the a1 array (also 40 bytes).
   err = memcpy_s(a1, sizeof(a1), a2, 10 * sizeof (int) );
   if (err)
   {
      printf("Error executing memcpy_s.\n");
   }
   else
   {
     for (i = 0; i < 10; i++)
       printf("%d ", a1[i]);
   }
   printf("\n");
}
0 1 4 9 16 25 36 49 64 81

Baca juga

Manipulasi buffer
_memccpy
memchr, wmemchr
memcmp, wmemcmp
memmove, wmemmove
memset, wmemset
strcpy, wcscpy, _mbscpy
strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l