void * memcpy ( void * destination, const void * source, size_t num )
1、函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
2、这个函数在遇到 ‘\0’ 的时候并不会停下来。
3、如果source和destination有任何的重叠,复制的结果都是未定义的
4、C语言标准规定memcpy函数只要可以处理 不重叠的内存拷贝就行。在VS编译器中功能得到了加强,也可以处理重叠的内存。
C语言中处理 重叠的内存 用到的函数为
memmove();
#include<stdio.h>
//用法:
struct S
{
char name[20];
int age;
};
int main()
{
struct S arr1[] = { {"zhangsan",25},{"lisi",20} };
struct S arr2[2] = { 0 };
memcpy(arr2, arr1, sizeof(arr1));
return 0;
}
//模拟实现:
void* my_memcpy(void* dest,const void* src, size_t num)
{
assert(dest && src);
void* ret = dest;
while (num--)//循环num次,以字节为单位进行复制。
{
*(char*)dest = *(char*)src;//转换为char*类型
++(char*)dest;
++(char*)src;
}
return ret;
}