Freigeben über


memcpy_s, wmemcpy_s

Kopiert Bytes zwischen Puffern. Diese Funktionen sind Versionen von memcpy, wmemcpy mit Sicherheitsverbesserungen wie unter Sicherheitsfunktionen in der CRT beschrieben.

Syntax

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
Neuer Puffer.

destSize
Größe des Zielpuffers in Bytes für memcpy_s und breite Zeichen (wchar_t) für wmemcpy_s.

src
Der Puffer, aus dem kopiert werden soll.

count
Anzahl der zu kopierenden Zeichen.

Rückgabewert

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

Fehlerbedingungen

dest destSize src count Rückgabewert Inhalt von dest
any Beliebig any 0 0 Not modified (Nicht geändert)
NULL any any ungleich null EINVAL Not modified (Nicht geändert)
any any NULL ungleich null EINVAL dest wird auf null gesetzt
any < count any ungleich null ERANGE dest wird auf null gesetzt

Hinweise

memcpy_s kopiert count Bytes von src nach dest; wmemcpy_s kopiert count Breitzeichen. Wenn sich Quell- und Zielregionen überlappen, ist das Verhalten von memcpy_s undefiniert. Verwendung memmove_s um überlappende Bereiche zu behandeln.

Diese Funktionen überprüfen ihre Parameter. Wenn count es sich nicht um Null und dest oder src um einen Nullzeiger handelt oder destSize kleiner als countist, rufen diese Funktionen den ungültigen Parameterhandler auf, wie in der Parameterüberprüfung beschrieben. Wenn die Ausführung fortgesetzt werden darf, werden diese Funktionen zurückgegeben EINVAL oder ERANGEauf den Rückgabewert festgelegt errno .

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.

Anforderungen

Routine Erforderlicher Header
memcpy_s <memory.h> oder <string.h>
wmemcpy_s <wchar.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

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");
}
0 1 4 9 16 25 36 49 64 81

Siehe auch

Pufferbearbeitung
_memccpy
memchr, wmemchr
memcmp, wmemcmp
memmove, wmemmove
memset, wmemset
strcpy, wcscpy_mbscpy
strncpy, , _strncpy_lwcsncpy, _wcsncpy_l, , _mbsncpy_mbsncpy_l
strncpy_s, , _strncpy_s_lwcsncpy_s, _wcsncpy_s_l, , _mbsncpy_s_mbsncpy_s_l