目录
一、memcpy函数
1.memcpy使用方法
头文件:#include<string.h>
使用:memcpy(目标空间指针,被复制空间指针,复制空间大小)
memcpy返回值为目标空间指针
例:
#include<stdio.h>
int main()
{
char arr1[10] = "abcdef";
char arr2[10] = { 0 };
memcpy(arr2, arr1, 6);
printf("%s", arr2);
}
注意:1.数组名即为第一个数组元素的指针
2.目标空间必须足够大,不能小于复制空间大小
3.当被复制空间和目标空间有重叠时(同一个数组),不能使用memcpy ,用memmove
2.memcpy模拟实现
#include<stdio.h>
#include<assert.h>
char* my_memcpy(void* dest, const void* src, int num)//为了程序的普适性 所以参数为void指针
{
void* tmp = dest;//稍后将返回目标空间原指针,所以先创建变量保存
assert(dest && src);//声明 当dest和src均不为空指针是程序才能运行(引用头文件<assert.h>)
while (num--)
{
*(char*)dest = *(char*)src;//char*为操作移动最小的指针类型,所以用char*
dest = (char*)dest + 1;
src = (char*)src + 1;
}
return tmp;
}
int main()
{
char arr1[10] = "abcdef";
char arr2[10] = { 0 };
my_memcpy(arr2, arr1, 6);
printf("%s", arr2);
}
二、memmove函数
1.memmove使用方法
头文件:#include<string.h>
使用:memmove(目标空间指针,被复制空间指针,复制空间大小)
memmove返回值为目标空间指针
2.memmove模拟实现
#include<stdio.h>
#include<assert.h>
char* my_memmove(void* dest, const void* src, int num)
{
char* tmp = dest;
if (dest > src)
{
while (num--)
{
*(((char*)dest) + num) = *(((char*)src) + num);
}
}
else
{
while (num--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
}
}
int main()
{
char arr1[10] = "abcdef";
my_memmove(arr1+1, arr1, 6);
printf("%s", arr1);
}
三、memcmy 内存比较
头文件:#include<string.h>
使用:memcmy(被比较空间1的指针,被比较空间2的指针,比较空间大小)
返回值:空间1比空间2元素少返回<0
空间1比空间2元素少返回>0
空间1和空间2元素一样多返回0