库函数memcpy的用法以及模拟实现memcpy
一:memcpy的用法
1:将str1复制到str2中
代码实现如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
const char str1[] = "This is a student";
char str2[50];
memcpy(str2, str1, strlen(str1)+1);
printf("%s\n", str2);
system("pause");
return 0;
}
运行结果截图:
2:将str1中从第6个开始的6个字符复制到str2中
代码实现如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char str1[] = "This is a student";
char str2[50];
memcpy(str2, str1 + 6, 6);
str2[6] = '\0';
printf("%s\n", str2);
system("pause");
return 0;
}
运行结果截图:
3:将str1覆盖到str2中的部分数据
代码实现如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char str1[] = "***";
char str2[] = "abcdef";
memcpy(str2, str1, strlen(str1));
printf("%s\n", str2);
system("pause");
return 0;
}
运行结果截图:
二:模拟实现memcpy
注:要考虑内存重叠问题
代码实现如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
char* my_memcpy(char* dest, const char* src, int n)
{
assert(dest != NULL);
assert(src != NULL);
char* pdest = (char*)dest;
char* psrc = (char*)src;
if (pdest > psrc && pdest < psrc + n)
{
pdest = pdest + n - 1;
psrc = psrc + n - 1;
while (n)
{
*pdest-- = *psrc--;
n--;
}
}
else
{
while (n)
{
*pdest++ = *psrc++;
n--;
}
}
return dest;
}
int main()
{
char str1[] = "abcdefgh";
char str2[] = "abcd";
my_memcpy(str1 + 2, str2, strlen(str2));
printf("%s\n", str1);
system("pause");
return 0;
}
运行结果截图: