完成這道題目之前首先要明確memmove是對內(nèi)存進行操作,所以函數(shù)的參數(shù)是void *,即可以操作任意類型的數(shù)據(jù)。
目前創(chuàng)新互聯(lián)已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計、江安網(wǎng)站維護等服務(wù),公司將堅持客戶導向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。其次要明白兩個待處理數(shù)據(jù)的關(guān)系,于是我畫了一張圖幫助大家理解
上面的是特殊情況,發(fā)生內(nèi)存重疊時只有這種情況是需要從右向左進行操作的,如果這種情況還是按照從左往右操作的話就會把想要拷貝的東西一直重復(fù)的拷貝下去,除這種情況之外都只需從左往右拷貝
再然后就是如何實現(xiàn)代碼的過程了,其方法和之前說過的拷貝函數(shù)類似,進行值的交換,在這里就不詳細贅述了。
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
void my_memmove(voiddst,const void src, int num)
{
voidret = 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;
}
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。