memmove_s
,wmemmove_s
将一个缓冲区移到另一个缓冲区。 这些函数的版本是 memmove
、wmemmove
,具有安全性增强功能,如 CRT 中的安全功能中所述。
语法
errno_t memmove_s(
void *dest,
size_t numberOfElements,
const void *src,
size_t count
);
errno_t wmemmove_s(
wchar_t *dest,
size_t numberOfElements,
const wchar_t *src,
size_t count
);
参数
dest
目标对象。
numberOfElements
目标缓冲区的大小。
src
源对象。
count
要复制的字节数 (memmove_s
) 或字符数(wmemmove_s
)。
返回值
如果成功,则为零;如果失败,则为错误代码
错误条件
dest |
numberOfElements |
src |
返回值 | dest 的内容 |
---|---|---|---|---|
NULL |
任意 | 任意 | EINVAL |
未修改 |
any | any | NULL |
EINVAL |
未修改 |
any | < count |
any | ERANGE |
未修改 |
注解
将字符的 count
字节从 src
复制到 dest
。 如果源和目标区域的一些部分重叠,memmove_s
可确保在覆盖之前复制重叠区域中的原始源字节。
如果 dest
或 src
是空指针,或者如果目标字符串过小,则这些函数调用无效参数处理程序,如参数验证中所述。 如果允许执行继续,则这些函数将返回 EINVAL
并将 errno
设置为 EINVAL
。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
要求
例程 | 必需的标头 |
---|---|
memmove_s |
<string.h> |
wmemmove_s |
<wchar.h> |
有关兼容性的详细信息,请参阅 兼容性。
示例
// crt_memmove_s.c
//
// The program demonstrates the
// memmove_s function which works as expected
// for moving overlapping regions.
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "0123456789";
printf("Before: %s\n", str);
// Move six bytes from the start of the string
// to a new position shifted by one byte. To protect against
// buffer overrun, the secure version of memmove requires the
// the length of the destination string to be specified.
memmove_s((str + 1), strnlen(str + 1, 10), str, 6);
printf_s(" After: %s\n", str);
}
输出
Before: 0123456789
After: 0012345789
另请参阅
缓冲区操作
_memccpy
memcpy
、wmemcpy
strcpy_s
、wcscpy_s
、_mbscpy_s
strcpy
、wcscpy
、_mbscpy
strncpy_s
、_strncpy_s_l
、wcsncpy_s
、_wcsncpy_s_l
、_mbsncpy_s
、_mbsncpy_s_l
strncpy
、_strncpy_l
、wcsncpy
、_wcsncpy_l
、_mbsncpy
、_mbsncpy_l
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈