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_s
count
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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk