Freigeben über


memcpy_s, wmemcpy_s

Kopiert Bytes zwischen Puffern. Diese Versionen von memcpy, wmemcpy enthalten Sicherheitserweiterungen wie unter Sicherheitsfunktionen in der CRT beschrieben.

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

Parameter

  • dest
    Neuer Puffer.

  • numberOfElements
    Größe des Zielpuffers.

  • src
    Puffer, aus der kopiert.

  • count
    Anzahl Zeichen zu kopieren.

Rückgabewert

Null, wenn erfolgreich, ein Fehlercode, wenn ein Fehler auftritt.

Fehlerbedingungen

dest

numberOfElements

src

Rückgabewert

Inhalt von dest

NULL

any

any

EINVAL

nicht geändert

any

any

NULL

EINVAL

dest wird aus null angehalten

any

< count

any

ERANGE

dest wird aus null angehalten

Hinweise

memcpy_s kopiert count Bytes von src in dest; wmemcpy_s Kopien count Breitzeichen (zwei Bytes). Wenn die Quelle und Ziel überschneiden, wird das Verhalten von memcpy_s nicht definiert. Verwenden Sie memmove_s, überlappende Bereiche zu behandeln.

Diese Funktionen überprüfen ihre Parameter. Wenn dest oder src ein NULL-Zeiger ist oder numberOfElements für den Puffer zu klein ist, rufen diese Funktionen den ungültigen Parameterhandler auf, wie in Parametervalidierung beschrieben. Wenn die weitere Ausführung zugelassen wird, geben diese Funktionen EINVAL zurück und stellen errno auf EINVAL ein.

Anforderungen

Routine

Erforderlicher Header

memcpy_s

<memory.h> oder <string.h>

wmemcpy_s

<wchar.h>

Zusätzliche Informationen zur Kompatibilität finden Sie unter Kompatibilität in der Einführung.

Beispiel

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

.NET Framework-Entsprechung

Nicht zutreffend. Mit PInvoke rufen Sie die Standard-C-Funktion auf. Weitere Informationen finden Sie unter Beispiele für Plattformaufrufe.

Siehe auch

Referenz

Pufferbearbeitung

_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