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 count
ist, 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 ERANGE
auf 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_l
wcsncpy
, _wcsncpy_l
, , _mbsncpy
_mbsncpy_l
strncpy_s
, , _strncpy_s_l
wcsncpy_s
, _wcsncpy_s_l
, , _mbsncpy_s
_mbsncpy_s_l