目录
一、memcpy
1.1、内容
定义格式为:
void *memcpy(void *dest, const void *src, size_t n)
是从src中复制n个字节到dest中。
1.2、头文件
#include<memory.h>或#include<string.h>
1.3、使用举例
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
const char src[] = "Ni Hao Shi Jie";
char dest[50];
int sz = sizeof(src) / sizeof(src[0]);
memcpy(dest, src, sz);
printf("%s\n", dest);
system("pause");
return 0;
}
上述代码的结果就是:“Ni Hao Shi Jie”
1.4、模拟实现
void *My_memcpy(void *dest, const void *src, size_t count)
{
if(count == 0)
{
return NULL;
}
if(dest == NULL || src == NULL)
{
return NULL;
}
char *p1 = dest;
const char *p2 = src;
while (count--)
{
*p1++ = *p2++;
}
return dest;
}
二、memmove
2.1、内容
定义格式:
void *memmove(void *dest, const void *src, size_t count)
和memcpy内容大致相同,是将src中的n个字节内容拷贝倒dest中,不过较于memcpy,memmove对于重叠内存这一方面,会更加的安全。
如果存在重叠的情况,memmove会将源字符串在覆盖之前将重复区域内容拷贝到目标区域中,结束后源字符串所在区域内容会被更改。
如果不存在重叠的情况,则memmove功能和memcpy功能一致。
2.2、头文件
#include<string.h>
2.3、使用举例
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char src[] = "Ni Ai Shi Jie";
char dest[] = "Wo Ai Shi Jie";
memmove(dest, src, 13);
printf("%s\n", dest);
system("pause");
return 0;
}
上述代码的结果就是:“Ni Ai Shi Jie”。
2.4、模拟实现
void *My_memmove(void *dest, const void *src, size_t count)
{
if (count == 0)
{
return NULL;
}
if (dest == NULL || src == NULL)
{
return NULL;
}
char *p1 = NULL;
char *p2 = NULL;
if (dest > src)
{
p1 = (char *)dest + count - 1;
p2 = (char *)src + count - 1;
while (count--)
{
*p1-- = *p2--;
}
}
else
{
p1 = (char *)dest;
p2 = (char *)src;
while (count--)
{
*p1++ = *p2++;
}
}
return dest;
}