memcpy_s
, wmemcpy_s
複製緩衝區之間的位元組。 這些函式是 的版本 memcpy
, wmemcpy
具有 CRT 中安全性功能中所述 的安全性增強功能。
語法
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
);
參數
dest
新的緩衝區。
destSize
目的地緩衝區的大小,以位元組為單位, memcpy_s
寬字元 ( wchar_t
) 表示 wmemcpy_s
。
src
要複製的緩衝區。
count
要複製的字元數目。
傳回值
如果成功,就是零,如果失敗,則為錯誤碼。
錯誤條件
dest |
destSize |
src |
count |
傳回值 | dest 的內容。 |
---|---|---|---|---|---|
任意 | 任意 | 任意 | 0 | 0 | 未修改 |
NULL |
任意 | 任意 | 非零 | EINVAL |
未修改 |
任意 | 任意 | NULL |
非零 | EINVAL |
dest 已歸零 |
任意 | < count |
任意 | 非零 | ERANGE |
dest 已歸零 |
備註
memcpy_s
將 count
位元組從 src
dest
複製到 ; wmemcpy_s
會 count
複製寬字元。 如果來源和目的地區域重迭,則 的行為 memcpy_s
為未定義。 使用 memmove_s
處理重疊的區域。
這些函式會驗證它們的參數。 如果 count
為非零且 dest
或 為 Null 指標,或 src
destSize
小於 count
,則這些函式會叫用不正確參數處理常式,如參數驗證 中所述 。 如果允許繼續執行,這些函式會傳回 EINVAL
或 ERANGE
,並設定 errno
為傳回值。
根據預設,此函式的全域狀態會限定于應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。
需求
常式 | 必要的標頭 |
---|---|
memcpy_s |
<memory.h> 或 <string.h> |
wmemcpy_s |
<wchar.h> |
如需相容性詳細資訊,請參閱相容性。
範例
// 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
另請參閱
緩衝區操作
_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
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應