成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

C語(yǔ)言模擬實(shí)現(xiàn)常見(jiàn)標(biāo)準(zhǔn)庫(kù)函數(shù)

1fe1se / 3050人閱讀

摘要:下面將分別模擬實(shí)現(xiàn),,,,,,模擬實(shí)現(xiàn)庫(kù)函數(shù)聲明表示拷貝到哪個(gè)目標(biāo),表示拷貝源,加修飾,防止被修改,表示拷貝多少個(gè)字節(jié)斷言和是否為先把的地址賦值給,以便最后返回,每次進(jìn)來(lái)先使用再,為的時(shí)候

下面將分別模擬實(shí)現(xiàn)memcpy,memmove,strstr,strcat,strcmp,strcpy,strlen

模擬實(shí)現(xiàn)memcpy

#include #include #include //void *memcpy( void *dest, const void *src, size_t count );//庫(kù)函數(shù)聲明//dest表示拷貝到哪個(gè)目標(biāo),src表示拷貝源,加const修飾,防止被修改,count表示拷貝多少個(gè)字節(jié)void* my_memcpy(void* dest, const void* src, size_t count){	assert(dest && src);//斷言dest和src是否為NULL	void* ret = dest;//先把dest的地址賦值給ret,以便最后返回	while (count--)//count--,每次進(jìn)來(lái)先使用再--,為0的時(shí)候退出	{		//把src的類型強(qiáng)制轉(zhuǎn)換為char*并解引用,賦值給強(qiáng)制轉(zhuǎn)換為char*并解引用的dest		*(char*)dest = *(char*)src;		dest = (char*)dest + 1;//指針+1		src = (char*)src + 1;//指針+1	}	return ret;//返回dest的起始地址}int main(){	int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };	int arr2[20] = { 2,3,4,5,6,7,8,9,10,11 };	int i = 0;	my_memcpy(arr1, arr2, 16);	for (i = 0; i < 10; i++)	{		printf("%d ", arr1[i]);	}	return 0;}

模擬實(shí)現(xiàn)memmove

#include #include #include //void *memmove( void *dest, const void *src, size_t count );//庫(kù)函數(shù)聲明//dest表示拷貝到哪個(gè)目標(biāo),src表示拷貝源,加const修飾,防止被修改,count表示拷貝多少個(gè)字節(jié)void* my_memmove(void* dest, const void* src, size_t count){	assert(dest && src);//斷言dest和src是否為NULL	void* ret = dest;	//重疊拷貝+不重疊拷貝	assert(dest && src);	if (dest < src)	{		//前->后		while (count--)		{			*(char*)dest = *(char*)src;			dest = (char*)dest + 1;			src = (char*)src + 1;		}			}	else	{		//后->前		while (count--)		{			*((char*)dest + count) = *((char*)src + count);		}	}	return ret;}int main(){	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };	//memcpy只要完成不重疊的內(nèi)存拷貝就完成任務(wù)	//my_memmove(arr + 2, arr, 16);	my_memmove(arr, arr + 2, 16);	//內(nèi)存拷貝時(shí),出現(xiàn)內(nèi)存重疊的現(xiàn)象,應(yīng)該使用memmove	int i = 0;	for (i = 0; i < 10; i++)	{		printf("%d ", arr[i]);	}}

模擬實(shí)現(xiàn)strstr

#include #include //char *strstr( const char *string, const char *strCharSet );//庫(kù)函數(shù)聲明//str1為大的字符串,str2為子字符串char* my_strstr(const char* str1, const char* str2){	//斷言str1,str2是否為NULL	assert(str1 && str2);	//創(chuàng)建三個(gè)指針變量,作用如上圖所示	const char* s1;	const char* s2;	const char* sp = str1;//sp為記錄str1的起始位置	if (*str2 == "/0")//如果*str2為空,則直接返回str1首地址,輸出		return str1;	while (*sp)//當(dāng)*sp為"/0",表示sp已指向str1最后的位置	{		s1 = sp;//把sp指向賦給si		s2 = str2;//把str2起始位置賦給s2		while (*s1 && *s2 && *s1 == *s2)//當(dāng)*s1和*s2的值不為"/0"以及*s1和*s2相等進(jìn)入循環(huán)		{			s1++;//兩個(gè)指針向后移動(dòng),再繼續(xù)比較			s2++;		}		if (*s2 == "/0")//如果成立,表示str2就是str1的子字符串			return sp;//返回sp的地址		sp++;//sp指針向后移動(dòng)	}	return NULL;//如果程序運(yùn)行到這里,表示str2不是str1的子字符串,則返回NULL}int main(){	char str1[] = "Do the right thing at the right time";	char str2[] = "right";	char* ret = my_strstr(str1, str2);	if (NULL == ret)		printf("找不到/n");	else		printf("%s/n", ret);		return 0;}

模擬實(shí)現(xiàn)strcat

#include #include //char *strcat( char *strDestination, const char *strSource );//庫(kù)函數(shù)聲明//dest表示追加字符的目標(biāo),src表示要追加的字符串,用const修飾,防止被修改char* my_strcat(char* dest, const char* src){	//判斷dest和src是否為NULL	assert(dest && src);	//把dest的起始位置賦值給ret,以便返回	char* ret = dest;	while (*dest)//當(dāng)*dest不為"/0",進(jìn)入循環(huán)	{		dest++;//dest指針向后移動(dòng)	}	//此時(shí)dest的指針已指向最后一個(gè)位置	while (*dest++ = *src++)//循環(huán)追加字符	{		;	}	return ret;}int main(){	char str1[20] = "I am ";	char str2[] = "zhao";	my_strcat(str1, str2);	printf("%s/n", str1);	return 0;}

模擬實(shí)現(xiàn)strcmp

#include #include //int strcmp( const char *string1, const char *string2 );//庫(kù)函數(shù)聲明//str1和str2表示要對(duì)比的字符串,因?yàn)椴恍枰薷膬?nèi)容,所以都加const修飾int my_strcmp(const char* str1, const char* str2){	assert(str1, str2);//判斷str1和str2是否為NULL	while (*str1 == *str2)//如果*str1和*str2相等,進(jìn)入循環(huán)	{		if (*str1 == "/0")//如果str1的值為"/0",表示兩個(gè)字符串相等			return 0;		str1++;//指針向后移動(dòng)		str2++;	}	return *str1 - *str2;//如果兩個(gè)字符串不相等,則返回它們的差值}int main(){	char str1[] = "abcdeg";	char str2[] = "abcdef";	int ret = my_strcmp(str1, str2);	if (0 > ret)		printf(");	else if (0 < ret)		printf(">/n");	else		printf("=/n");		return 0;}

模擬實(shí)現(xiàn)strcpy

#include #include //char *strcpy( char *strDestination, const char *strSource );//庫(kù)函數(shù)聲明//dest表示拷貝的目標(biāo),src表示拷貝的源,因?yàn)樵床恍枰薷?,所以const修飾char* my_strcpy(char* dest, const char* src){	//判斷dest和src是否為空	assert(dest && src);	//dest的起始位置賦給ret	char* ret = dest;	while (*dest++ = *src++)//源賦值給目標(biāo),源目標(biāo)指針向后移動(dòng)	{		;	}	return ret;}int main(){	char str1[] = "at the not same";	char str2[] = "at the same!!!";	char* ret = my_strcpy(str1, str2);	printf("%s/n", ret);	perror("test:");	return 0;}

模擬實(shí)現(xiàn)strlen

#include #include #include //size_t strlen( const char *string );//庫(kù)函數(shù)聲明//str表示要計(jì)算的字符串,用const修飾,返回值為無(wú)符號(hào)的int//1.計(jì)數(shù)器size_t my_strlen(const char* str){	//判斷str是否為NULL	assert(str);	size_t count = 0;//創(chuàng)建計(jì)數(shù)變量	while (*str)	{		str++;		count++;	}	return count;}//2.遞歸size_t my_strlen(const char* str){	//判斷str是否為NULL	assert(str);	if (*str)//如果*str不等于"/0"	{		str++;//str指針向后移動(dòng)		return 1 + my_strlen(str);	}	else		return 0;}//3.指針size_t my_strlen(const char* str){	char* p = str;//把str的起始地址賦值給char*類型的指針變量p	while (*str)//當(dāng)*str不為"/0",進(jìn)入循環(huán)	{		str++;	}	return str - p;//返回首尾指針的差值}int main(){	char str[] = "Today is a good day !";	size_t len = my_strlen(str);	printf("%d/n", len);	perror("test:");	return 0;}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/121537.html

相關(guān)文章

  • [C/C++]詳解STL容器1--string的功能和模擬實(shí)現(xiàn)(深淺拷貝問(wèn)題)

    摘要:本文介紹了類的常用接口的使用,并對(duì)其進(jìn)行了模擬實(shí)現(xiàn),對(duì)模擬實(shí)現(xiàn)中涉及到的深淺拷貝問(wèn)題進(jìn)行了解析。在此之前,必須提到一個(gè)經(jīng)典問(wèn)題。為了解決淺拷貝問(wèn)題,所以中引入了深拷貝。但是實(shí)際使用中需要是第一個(gè)形參對(duì)象,才能正常使用。 本文介紹了string類的常用接口的使用,并對(duì)其進(jìn)行了模擬實(shí)現(xiàn),對(duì)模擬實(shí)...

    tianren124 評(píng)論0 收藏0
  • C語(yǔ)言進(jìn)階】字符串&amp;內(nèi)存函數(shù)

    摘要:字符串常量適用于那些對(duì)它不做修改的字符串函數(shù)。同時(shí),語(yǔ)言提供了一系列庫(kù)函數(shù)來(lái)對(duì)操作字符串,這些庫(kù)函數(shù)都包含在頭文件中。目標(biāo)空間必須足夠大,以確保能存放源字符串。拷貝個(gè)字符從源字符串到目標(biāo)空間。 前言: ????????字符串是一種非常重要的數(shù)據(jù)類型,但是C語(yǔ)言不存在顯式的字符串類型,C...

    pingan8787 評(píng)論0 收藏0
  • polarphp:一個(gè)新的 PHP 語(yǔ)言運(yùn)行時(shí)環(huán)境

    摘要:項(xiàng)目介紹是一個(gè)全新的語(yǔ)言的運(yùn)行時(shí)環(huán)境,基于目前最新的進(jìn)行打造,支持最新的語(yǔ)言規(guī)范,同時(shí)提供了自己的運(yùn)行時(shí)標(biāo)準(zhǔn)庫(kù)。同樣也在的基礎(chǔ)上進(jìn)行打造,實(shí)現(xiàn)了一個(gè)除開(kāi)發(fā)之外的一個(gè)全新的運(yùn)行環(huán)境。發(fā)布核心虛擬機(jī)的鏡像。整合運(yùn)行時(shí)框架。 showImg(https://segmentfault.com/img/bVbnQXK); polarphp 項(xiàng)目介紹 polarphp是一個(gè)全新的PHP語(yǔ)言的運(yùn)行時(shí)...

    宋華 評(píng)論0 收藏0
  • BREW SDK 九大功能之其他服務(wù)

    摘要:幫助函數(shù)就是一種典型的其他服務(wù)。一些函數(shù)則可能返回結(jié)構(gòu)指針作為輸出。宏定義中把大量的函數(shù)指針,接口的函數(shù)調(diào)用定義為宏或者是。這里需要特別指出的是,語(yǔ)言中沒(méi)有類型,中使用定義了類型作為類型,取值是宏定義,。 幫助函數(shù)就是一種典型的其他服務(wù)。在BREW 的應(yīng)用程序中,不能直接調(diào)用標(biāo)準(zhǔn)C庫(kù)...

    jone5679 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<