一、
作业标题
模拟实现memmove
(说明:memmove是较早版本momcpy的升级版,现在VS里的memcpy等同于mommove,本文第二题实现的memcpy是较早版本的memcpy,就是因为较早版本的memcpy不完美,所以开发出memmove函数,不过之后也对memcpy进行了升级,功能已与memmove一样)
作业内容
模拟实现memmove
void* My_memmove(void* Destination, void* source, size_t num)
{
void* ret = Destination;
if (Destination < source)
{
while (num--)
{
*(char*)Destination = *(char*)source;
Destination = (char*)Destination + 1;
source = (char*)source + 1;
}
}
else
{
while (num--)
{
*((char*)Destination + num) = *((char*)source + num);
}
}
return ret;
}
int main()
{
int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
My_memmove(arr1 + 2, arr1, 5 * sizeof(arr1[0]));
for (i = 0; i < 10; i++)
{
printf("%d ", arr1[i]);
}
return 0;
}
二、
作业标题
模拟实现memcpy
作业内容
模拟实现memcpy
void* My_memcpy(void* Destination, void* source, size_t num)
{
void* ret = Destination;
while (num--)
{
*(char*)Destination = *(char*)source;
Destination = (char*)Destination + 1;
source= (char*)source + 1;
}
return ret;
}
int main()
{
int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
int arr2[5] = { 0 };
char arr3[15] = "hello "; //因为arr3实际为hello \0,
//所以world拷贝到hello \0后
//面时,要注意把\0给顶掉,
//否则即使拷贝过去,程序输
//出时遇到\0就会停止,也不
//会打印后面的world
char arr4[15] = "world war";
int i = 0;
My_memcpy(arr2, arr1 + 5, 5 * sizeof(arr1[0])); //将arr1的第6个元素到第10个
//元素拷贝到arr2中,共拷贝了
//5*sizeof(arr1[0])=20个字
//节
My_memcpy(arr3 + 6, arr4, 5 * sizeof(arr4[0])); //将arr4中前5个字符考到arr3
//中,从arr3中的第七个位置开
//始拷贝
for (i = 0; i < 5; i++)
{
printf("%d ", arr2[i]);
}
printf("\n");
printf("%s\n", arr3);
return 0;
}
"hello"后面不加空格的后果
|