您好,登錄后才能下訂單哦!
完成這道題目之前首先要明確memmove是對內存進行操作,所以函數的參數是void *,即可以操作任意類型的數據。
其次要明白兩個待處理數據的關系,于是我畫了一張圖幫助大家理解
上面的是特殊情況,發生內存重疊時只有這種情況是需要從右向左進行操作的,如果這種情況還是按照從左往右操作的話就會把想要拷貝的東西一直重復的拷貝下去,除這種情況之外都只需從左往右拷貝
再然后就是如何實現代碼的過程了,其方法和之前說過的拷貝函數類似,進行值的交換,在這里就不詳細贅述了。
#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;
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。