模擬實現memmove函數

完成這道題目之前首先要明確memmove是對內存進行操作,所以函數的參數是void *,即可以操作任意類型的數據。

其次要明白兩個待處理數據的關係,於是我畫了一張圖幫助大家理解
模擬實現memmove函數
上面的是特殊情況,發生內存重疊時只有這種情況是需要從右向左進行操作的,如果這種情況還是按照從左往右操作的話就會把想要拷貝的東西一直重複的拷貝下去,除這種情況之外都只需從左往右拷貝

再然後就是如何實現代碼的過程了,其方法和之前說過的拷貝函數類似,進行值的交換,在這裏就不詳細贅述了。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
void my_memmove(void dst,const void src, int num)
{
void
ret = dst;
if (dst > src&&(char )dst <((char ) src + num))//dst包含於src的情況,從後往前進行操作
{
dst = (char )dst + num - 1;//將dst指向最後一個元素
src = (char
)src + num - 1;
while (num--)
{
(char)dst = (char)src;
dst=(char )dst-1;
src=(char
)src-1;
}
}
else
{
while (num--)
{
(char)dst = (char)src;
dst = (char )dst + 1;
src = (char
)src + 1;
}
}
return (ret);
}
int main()
{
char dst[100] = "hello world";

my_memmove(dst + 1, dst, strlen(dst) + 1);
printf("%s",dst);
system("pause");
return 0;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章