欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

用C語言模擬實(shí)現(xiàn)memcpy函數(shù),memmove函數(shù)和memset函數(shù)-創(chuàng)新互聯(lián)

模擬實(shí)現(xiàn)memcpy函數(shù):

作為一家“創(chuàng)意+整合+營(yíng)銷”的成都網(wǎng)站建設(shè)機(jī)構(gòu),我們?cè)跇I(yè)內(nèi)良好的客戶口碑。成都創(chuàng)新互聯(lián)提供從前期的網(wǎng)站品牌分析策劃、網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、創(chuàng)意表現(xiàn)、網(wǎng)頁制作、系統(tǒng)開發(fā)以及后續(xù)網(wǎng)站營(yíng)銷運(yùn)營(yíng)等一系列服務(wù),幫助企業(yè)打造創(chuàng)新的互聯(lián)網(wǎng)品牌經(jīng)營(yíng)模式與有效的網(wǎng)絡(luò)營(yíng)銷方法,創(chuàng)造更大的價(jià)值。

函數(shù)原型:void *memcpy (void *p,void *m, size_t num);

memcpy與strcpy相比,memcpy函數(shù)用來做內(nèi)存拷貝,可以用它拷貝任何數(shù)據(jù)類型的對(duì)象,并且可以指定拷貝的數(shù)據(jù)長(zhǎng)度。stycpy函數(shù)也是用來做內(nèi)存拷貝,并且只能拷貝字符串類型的數(shù)據(jù)。memcpy并不是遇到"\0"就結(jié)束,而是一定會(huì)拷貝完num個(gè)字節(jié)。而strcpy 遇到"\0"就結(jié)束。

memcpy函數(shù)代碼:

#include <stdio.h>
#include <assert.h>
void my_memcpy(void *p,const void *m,size_t num)
{
	char *str1 = (char *)p;
	const char *str2 = (const char *)m;
	assert(p);
	assert(m);
	while(num)
	{
		*str1=*str2;
		str1++;
		str2++;
		num--;
	} 
}
int main()
{
	int arr[]={1,2,3,4,5,6,7,8,9};
	int i;
	my_memcpy(arr,arr+3,sizeof(int)*5);
	for(i=0;i<9;i++)
	{
		printf("%d",arr[i]);
	}
	return 0;
}

 memcpy可以拷貝任何數(shù)據(jù)類型的對(duì)象,比如,上段代碼中用memcpy實(shí)現(xiàn)了拷貝int 型的數(shù)組,用memcpy實(shí)現(xiàn)數(shù)組的拷貝只能是后面的拷貝前面的,上面代碼中從數(shù)組的arr+3向arr拷貝,在main函數(shù)中存入形參(arr,arr+3,sizeof(int)*5),在調(diào)用函數(shù)中用void型的指針接收(void *p,const void* m,size_t num),void可以指向任何類型的指針,但是由于復(fù)制的時(shí)候要一個(gè)個(gè)字節(jié)去復(fù)制,所以我們需要把void轉(zhuǎn)換成char類型,然后char類型的兩個(gè)指針進(jìn)行拷貝,指針地址加加。

 模擬實(shí)現(xiàn)memmove函數(shù);

memmove和memcpy函數(shù)都是C語言中的庫函數(shù),作用是拷貝一定長(zhǎng)度的內(nèi)存的內(nèi)容,它們的作用是一樣的,唯一的區(qū)別就是當(dāng)內(nèi)存發(fā)生局部重疊的時(shí)候,memmove保證拷貝的結(jié)果是正確的,memcpy不保證拷貝的結(jié)果是正確的。

memmove函數(shù)代碼:

#include <stdio.h>
#include <assert.h>

void my_memmove(void *p,const void *m,size_t num)
{
	char *str1 = (char *)p;
	const char *str2 = (const char *)m;
	assert(p);
	assert(m);
	if (str1>str2 && str1 < str2+num)
	{
		while (num--)
		{
			*(str1+num) = *(str2+num);
		}
	}
	else
	{
		while(num)
		{
			*str1=*str2;
			str1++;
			str2++;
			num--;
		}
	}
}

int main()
{
	int arr[]={1,2,3,4,5,6,7,8,9};
	int i;
	//my_memmove(arr,arr+3,sizeof(int)*5);
	my_memmove(arr+3,arr+1,sizeof(int)*5);
	for(i=0;i<9;i++)
	{
		printf("%d",arr[i]);
	}
	return 0;
}

memmove分兩種情況一種是拷貝時(shí)內(nèi)存內(nèi)部沒有發(fā)生局部重疊的時(shí)候,它的拷貝方式跟memcpy是相同的,另一種是內(nèi)存內(nèi)部發(fā)生局部重疊時(shí),相當(dāng)于(str1>str2&&str1<str2+num),用memmove拷貝實(shí)現(xiàn)從最后一個(gè)往前拷貝,保證了結(jié)果的正確性。

 模擬實(shí)現(xiàn)memset函數(shù):

函數(shù)原型是:void *memset(void *src,int num,size_t len);

memset函數(shù)通常用來對(duì)一塊已經(jīng)分配地址的內(nèi)存進(jìn)行初始化,并且通常初始化為0.

#include <stdio.h>
#include <string.h>
void my_memset (void *src,int num,size_t len)
{
	char *ptr=(char*)src;
	while(len--)
	{
		*ptr=((char*)num);
		ptr++;
	}
}

int main()
{
	int arr[10];
	int i;
	my_memset(arr,0,5*sizeof(int));
	for (i=0;i<10;i++)
	{
		printf("%d ",arr[i]);
	}
	return 0;
}

一定需要注意的是,memset是按照字節(jié)對(duì)初始化空間進(jìn)行初始化的,也就是說,函數(shù)里面的第二個(gè)參數(shù)的那個(gè)初值是按照一個(gè)一個(gè)字節(jié)往第一個(gè)參數(shù)所指區(qū)域賦值的,所以對(duì)于單字節(jié)數(shù)據(jù)類型(char)可以初始化為任何值,但對(duì)于非但字節(jié)數(shù)據(jù)類型只能初始化為0.

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前文章:用C語言模擬實(shí)現(xiàn)memcpy函數(shù),memmove函數(shù)和memset函數(shù)-創(chuàng)新互聯(lián)
文章URL:http://www.chinadenli.net/article36/djdhpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)網(wǎng)站改版靜態(tài)網(wǎng)站標(biāo)簽優(yōu)化網(wǎng)站建設(shè)商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)