memmove_s
, wmemmove_s
Memindahkan satu buffer ke buffer lainnya. Fungsi-fungsi ini adalah versi memmove
, wmemmove
dengan peningkatan keamanan seperti yang dijelaskan dalam Fitur keamanan di CRT.
Sintaks
errno_t memmove_s(
void *dest,
size_t numberOfElements,
const void *src,
size_t count
);
errno_t wmemmove_s(
wchar_t *dest,
size_t numberOfElements,
const wchar_t *src,
size_t count
);
Parameter
dest
Objek tujuan.
numberOfElements
Ukuran buffer tujuan.
src
Objek sumber.
count
Jumlah byte (memmove_s
) atau karakter (wmemmove_s
) yang akan disalin.
Nilai hasil
Nol jika berhasil; kode kesalahan pada kegagalan
Kondisi kesalahan
dest |
numberOfElements |
src |
Nilai hasil | Isi dari dest |
---|---|---|---|---|
NULL |
any | any | EINVAL |
tidak dimodifikasi |
any | any | NULL |
EINVAL |
tidak dimodifikasi |
any | < count |
any | ERANGE |
tidak dimodifikasi |
Keterangan
count
Menyalin byte karakter dari src
ke dest
. Jika beberapa bagian sumber dan wilayah tujuan tumpang tindih, memmove_s
memastikan bahwa byte sumber asli di wilayah yang tumpang tindih disalin sebelum ditimpa.
Jika dest
atau jika src
adalah penunjuk null, atau jika string tujuan terlalu kecil, fungsi-fungsi ini memanggil handler parameter yang tidak valid, seperti yang dijelaskan dalam Validasi parameter . Jika eksekusi diizinkan untuk melanjutkan, fungsi-fungsi ini kembali EINVAL
dan diatur errno
ke EINVAL
.
Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.
Persyaratan
Rutin | Header yang diperlukan |
---|---|
memmove_s |
<string.h> |
wmemmove_s |
<wchar.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
// crt_memmove_s.c
//
// The program demonstrates the
// memmove_s function which works as expected
// for moving overlapping regions.
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "0123456789";
printf("Before: %s\n", str);
// Move six bytes from the start of the string
// to a new position shifted by one byte. To protect against
// buffer overrun, the secure version of memmove requires the
// the length of the destination string to be specified.
memmove_s((str + 1), strnlen(str + 1, 10), str, 6);
printf_s(" After: %s\n", str);
}
Hasil
Before: 0123456789
After: 0012345789
Baca juga
Manipulasi buffer
_memccpy
memcpy
, wmemcpy
strcpy_s
, wcscpy_s
, _mbscpy_s
strcpy
, wcscpy
, _mbscpy
strncpy_s
, _strncpy_s_l
, wcsncpy_s
, _wcsncpy_s_l
, _mbsncpy_s
, _mbsncpy_s_l
strncpy
, _strncpy_l
, wcsncpy
, _wcsncpy_l
, _mbsncpy
, _mbsncpy_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