Bagikan melalui


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