memcpy_s, wmemcpy_s

Kopiert Bytes zwischen Puffern.Dies sind Versionen von memcpy, wmemcpy mit beschrieben, wie unter Security Enhancements in Sicherheitsfeatures im CRT.

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
    Der Puffer, ab dem kopiert werden soll.

  • count
    Die Anzahl der Zeichen kopiert werden sollen.

Rückgabewert

Beliebige wenn erfolgreich; Fehlercode ein Fehler auf.

Fehlerbedingungen

dest

numberOfElements

src

Rückgabewert

Inhalt von dest

NULL

alle

alle

EINVAL

nicht geändert

alle

alle

NULL

EINVAL

dest auf null festgelegt wird

alle

< count

alle

ERANGE

dest auf null festgelegt wird

Hinweise

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

Diese Funktionen überprüfen deren Parameter.Wenn dest oder src ein NULL-Zeiger ist, oder numberOfElements für den Puffer zu klein ist, rufen diese Funktionen der ungültige Parameter für ein, wie in Parametervalidierungbeschrieben.Wenn die Ausführung fortgesetzt werden kann, darf dieser Funktionen geben EINVAL festlegen und errno zu EINVAL.

Anforderungen

Routine

Erforderlicher Header

memcpy_s

<memory.h> oder <string.h>

wmemcpy_s

<wchar.h>

Um Kompatibilität zusätzlichen Informationen 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. Um die Standard-C-Funktion aufzurufen, verwenden Sie PInvoke. Weitere Informationen finden Sie unter Plattformaufruf-Beispiele.

Siehe auch

Referenz

Puffer-Manipulation

_memccpy

memchr, wmemchr

memcmp, wmemcmp

memmove, wmemmove

memset, wmemset

überprüfte, 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