Aracılığıyla paylaş


memmove_s, wmemmove_s

Bir arabelleği diğerine taşır. Bu işlevler, CRT'deki memmovewmemmoveGüvenlik özellikleri bölümünde açıklandığı gibi güvenlik geliştirmeleri içeren sürümleridir.

Sözdizimi

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
);

Parametreler

dest
Hedef nesne.

numberOfElements
Hedef arabelleğin boyutu.

src
Kaynak nesne.

count
Kopyalanacak bayt (memmove_s) veya karakter sayısıwmemmove_s.

Dönüş değeri

Başarılı olursa sıfır; hata durumunda hata kodu

Hata koşulları

dest numberOfElements src Dönüş değeri İçeriği dest
NULL herhangi bir herhangi bir EINVAL değiştirilmedi
herhangi bir herhangi bir NULL EINVAL değiştirilmedi
herhangi bir < count herhangi bir ERANGE değiştirilmedi

Açıklamalar

'den'e srcdestkarakter baytlarını count kopyalar. Kaynağın ve hedef bölgelerin bazı bölümleri çakışıyorsa, memmove_s çakışan bölgedeki özgün kaynak baytların üzerine yazılmadan önce kopyalanmasını sağlar.

Null işaretçiyse dest veya ise src veya hedef dize çok küçükse, bu işlevler Parametre doğrulama bölümünde açıklandığı gibi geçersiz bir parametre işleyicisi çağırır. Yürütmenin devam etmesi için izin verilirse, bu işlevler döndürülerek EINVAL olarak EINVALayarlanırerrno.

Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.

Gereksinimler

Yordam Gerekli başlık
memmove_s <string.h>
wmemmove_s <wchar.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

// 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);
}

Çıktı

Before: 0123456789
After: 0012345789

Ayrıca bkz.

Arabellek işleme
_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