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 |
不修改 |
任何 |
任何 |
NULL |
EINVAL |
不修改 |
任何 |
AMP_LT count |
任何 |
ERANGE |
不修改 |
备注
复制 count 字节从 src 的字符。 dest*。*如果原产地和为目标的一些区域重叠, memmove_s 确保原始源字节该重叠的区域在复盖之前副本。
如果 dest ,或者 src 是 null 指针,或者,如果目标字符串太小,这些函数调用无效参数处理程序,如 参数验证 所述。如果执行允许继续,这些函数返回 EINVAL 并将 errno 到 EINVAL。
要求
实例 |
必需的头 |
---|---|
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);
}
Output
Before: 0123456789
After: 0012345789
.NET Framework 等效项
请参见
参考
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l
strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l