memcpy
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
void* Memcpy(void* dst, const void* src,int num){
assert(dst && src); //字符串不为空
void* ret = dst;
//从源字符串复制到目标空间
char* str_dst = (char*)dst;
char* str_src = (char*)src;
for (int i = 0; i < num; ++i)
{
str_dst[i] = str_src[i]; // *(str_src+i)
}
return dst;
}
int main(){
char dst[20] = "abcde";
const char* src = "he";
char* ret1 = Memcpy(dst, src, 2);
printf("%s\n", ret1);
system("pause");
}
memmove
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
void* Memmove(void* dst, const void* src, size_t num)
{
assert(src && dst);
char* d = (char*)dst;
char* s = (char*)src;
if (s < d && dst < s + num) //后重叠时从后往前拷贝
{
for (int i = num - 1; i >= 0; --i)
{
d[i] = s[i];
}
}
else // 前重叠和不重叠时从前往后考
{
for (int i = 0; i < num; ++i)
{
d[i] = s[i];
}
}
return dst;
}
int main(){
int a2[10] = { 1, 2, 3, 4, 5 };
int a1[10];
Memmove(a1, a2, 10 * sizeof(int));
for (int i = 0; i < 10; ++i)
{
printf("%d ", a2[i]);
}
printf("\n");
system("pause");
return 0;
}