最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一篇文章教你自己動手實現(xiàn)C語言庫函數(shù)

 更新時間:2021年09月16日 15:16:52   作者:大桑樹保安隊  
這篇文章主要介紹了C語言庫函數(shù)的相關(guān)資料,小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

memmove

函數(shù)聲明

void * memmove ( void * destination, const void * source, size_t num );

函數(shù)作用

將num字節(jié)的值從source指向的位置復制到destination指向的內(nèi)存塊。復制就像使用了中間緩沖區(qū)一樣進行,從而允許目標和源重疊。

該函數(shù)不檢查source中是否有任何終止的空字符——它總是精確地復制num字節(jié)。

為了避免溢出,目標和源參數(shù)所指向的數(shù)組的大小必須至少為num字節(jié)。
返回destination。

實現(xiàn)memmove

#include <stdio.h>
#include <string.h>
#include <assert.h>
//實現(xiàn)memmove
void* my_memmove(void* dst, const void* src, size_t n)
{
    assert(dst && src);
	char* dst_temp = (char*)dst;
	char* src_temp = (char*)src;
	if (src_temp<dst_temp && src_temp + n>dst_temp)//src在dst前,兩者交錯,需從后往前復制
	{
		while (n)
		{
			*(dst_temp + n - 1 )= *(src_temp + n - 1);
			n--;
		}
	}
	else
	{
		while (n--)
		{
			*dst_temp++ = *src_temp++;
		}
	}
	return dst;
}
int main()
{
	int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
	my_memmove(a+2, a, 4*sizeof(int));
	for (int i = 0; i < 10; ++i)
	{
		printf("%d ", a[i]);
	}
	return 0;
}

在這里插入圖片描述

memcpy

函數(shù)聲明

void * memcpy ( void * destination, const void * source, size_t num );

函數(shù)作用

將num個字節(jié)的值從source所指向的位置開始直接復制到destination所指向的內(nèi)存塊。

該函數(shù)不檢查source中是否有任何終止的空字符——它總是精確地復制num字節(jié)。

為了避免溢出,目標和源參數(shù)所指向的數(shù)組的大小必須至少為num字節(jié),并且不能重疊(對于重疊的內(nèi)存塊,memmove是一種更安全的方法)。
返回destination。

實現(xiàn)memcpy

//實現(xiàn)memcpy
void* my_memcpy(void* dst, const void* src, size_t n)
{
	assert(dst && src);
	char* dst_temp = (char*)dst;
	char* src_temp = (char*)src;
	while (n--)
	{
		*dst_temp++ = *src_temp++;
	}
	return dst;
}

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

在這里插入圖片描述

重疊的區(qū)間將會被提前破壞。

strstr

函數(shù)聲明

char * strstr (char * str1, const char * str2 );

函數(shù)作用

查找子字符串

返回一個指向str1中第一次出現(xiàn)的str2的指針,如果str2不是str1的一部分,則返回一個空指針。

匹配過程不包括結(jié)束空字符,但它在此停止。

實現(xiàn)strstr

/實現(xiàn)strstr
char* my_strstr(const char* mom,const char* son)
{
	char* cp=mom;
	char* i, *j;
	if (*son == '\0')
	{
		return mom;
	}
	while (*cp != '\0')
	{
		i = cp;
		j = son;
		while (i && *i == *j)
		{
			i++;
			j++;
			if (*j == '\0')
				return cp;
		}
		cp++;
	}
	return NULL;
}
int main()
{
	char mom[] = "abcdefghijk";
	char son[] = "ghi";
	printf("%s\n",my_strstr(mom, son));
	return 0;
}

在這里插入圖片描述

strcat

函數(shù)聲明

char * strstr (char * str1, const char * str2 );

函數(shù)作用

連接字符串

將source字符串的副本粘貼追加到目標字符串。destination中的結(jié)束空字符被source中的第一個字符覆蓋,并且在由destination中的兩個字符串聯(lián)形成的新字符串的末尾包含一個空字符。

目標和源不應重疊。
返回destionation。

實現(xiàn)strcat

/實現(xiàn)strstr
char* my_strstr(const char* mom,const char* son)
{
	char* cp=mom;
	char* i, *j;
	if (*son == '\0')
	{
		return mom;
	}
	while (*cp != '\0')
	{
		i = cp;
		j = son;
		while (i && *i == *j)
		{
			i++;
			j++;
			if (*j == '\0')
				return cp;
		}
		cp++;
	}
	return NULL;
}
int main()
{
	char mom[] = "abcdefghijk";
	char son[] = "ghi";
	printf("%s\n",my_strstr(mom, son));
	return 0;
}

在這里插入圖片描述

strcmp

函數(shù)聲明

char * strcat ( char * destination, const char * source );

函數(shù)作用

比較字符串str1和字符串str2。

這個函數(shù)開始比較每個字符串的第一個字符。如果它們彼此相等,則繼續(xù)執(zhí)行下面的對,直到字符不同或到達一個終止的空字符為止。

返回值

1)<0 第一個不匹配的字符在ptr1中的值比在ptr2中的值低

2)=0 兩個字符串的內(nèi)容相等

3)>0 第一個不匹配的字符在ptr1中的值大于ptr2中的值

實現(xiàn)strcmp

char* my_strcat(char* dst,const char* src)
{
	assert(dst && src);
	int len1 = strlen(dst);
	char* start = dst + len1;
	while (*start++ = *src++)
	{
		;
	}
	return dst;
}
int main()
{
	char mom[26] ="abcdefg";
	char son[] = "hijk";

	printf("%s\n",my_strcat(mom, son));
	return 0;
}

strcpy

函數(shù)聲明

int strcmp ( const char * str1, const char * str2 );

函數(shù)作用

復制字符串

將source指向的字符串復制到destination指向的數(shù)組中,包括終止空字符(并在此點停止)。

為了避免溢出,destination指向的數(shù)組的大小應該足夠長,以包含與source相同的字符串(包括結(jié)束的null字符),并且不應該在內(nèi)存中與source重疊。
返回destination。

實現(xiàn)strcpy

//實現(xiàn)strcpy
char* my_strcpy(char* dst, const char* src)
{
	char* start = dst;
	assert(dst && src);
	while (*dst++ = *src++);
	return start;
}

int main()
{
	char mom[26] ="abcdefg";
	char son[] = "abq";
	my_strcpy(mom, son);
	printf("%s\n",mom);
	return 0;
}

在這里插入圖片描述

strlen

函數(shù)聲明

size_t strlen ( const char * str );

函數(shù)作用

獲取字符串長度

返回C字符串str的長度。

C字符串的長度由結(jié)束空字符決定:C字符串的長度等于字符串開頭和結(jié)束空字符之間的字符數(shù)(不包括結(jié)束空字符本身)。

char mystr[100]="test string";

定義了一個長度為100個字符的字符數(shù)組,但是用于初始化mystr的C字符串長度只有11個字符。因此,當sizeof(mystr)計算為100時,strlen(mystr)返回11。

實現(xiàn)strlen

//實現(xiàn)strlen
size_t my_strlen(const char* str)
{
	size_t len = 0;
	while (*str++)
	{
		len++;
	}
	return len;
}

int main()
{
	char mom[26] ="abcdefg";
	printf("%d\n",my_strlen(mom));
	return 0;
}

output:7

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C++超詳細分析函數(shù)重載的使用

    C++超詳細分析函數(shù)重載的使用

    C++?允許多個函數(shù)擁有相同的名字,只要它們的參數(shù)列表不同就可以,這就是函數(shù)的重載(Function?Overloading),借助重載,一個函數(shù)名可以有多種用途
    2022-04-04
  • C++實現(xiàn)十六進制字符串轉(zhuǎn)換成int整形值的示例

    C++實現(xiàn)十六進制字符串轉(zhuǎn)換成int整形值的示例

    今天小編就為大家分享一篇關(guān)于C++實現(xiàn)十六進制字符串轉(zhuǎn)換成int整形值的示例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 使用c語言生成隨機數(shù)的示例分享

    使用c語言生成隨機數(shù)的示例分享

    在C語言中,rand()函數(shù)可以用來產(chǎn)生隨機數(shù),但是這不是真真意義上的隨機數(shù),是一個偽隨機數(shù),這篇文章主要介紹了使用c語言生成隨機數(shù)的示例,需要的朋友可以參考下
    2014-03-03
  • 詳解C語言中的常量指針和指針常量

    詳解C語言中的常量指針和指針常量

    這篇文章主要介紹了詳解C語言中的常量指針和指針常量,包括其之間的區(qū)別是C語言入門學習中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • C++共用體的定義與應用總結(jié)

    C++共用體的定義與應用總結(jié)

    共同體的定義類似結(jié)構(gòu)體,不過共同體的所有成員都在同一段內(nèi)存中存放,起始地址一樣,并且同一時刻只能使用其中的一個成員變量
    2013-10-10
  • 詳解C++作用域與生命周期

    詳解C++作用域與生命周期

    這篇文章主要介紹了C++作用域與生命周期的相關(guān)資料,幫助大家更好的理解和學習c++,感興趣的朋友可以了解下
    2020-08-08
  • C語言 二叉樹的鏈式存儲實例

    C語言 二叉樹的鏈式存儲實例

    本篇文章主要介紹C語言中二叉樹的鏈式存儲,這里提供了一個實例代碼進行參考,這樣對二叉樹的鏈式存儲有更深入的了解,希望能幫到學習這塊知識的同學
    2016-07-07
  • C++實現(xiàn)基于不相交集合的O(mlgn)復雜度的kruskal算法

    C++實現(xiàn)基于不相交集合的O(mlgn)復雜度的kruskal算法

    這篇文章主要為大家詳細介紹了C++如何實現(xiàn)基于不相交集合的O(mlgn)復雜度的kruskal算法,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-02-02
  • C++中的動態(tài)分派在HotSpot?VM中的應用小結(jié)

    C++中的動態(tài)分派在HotSpot?VM中的應用小結(jié)

    多態(tài)是面向?qū)ο缶幊陶Z言的重要特性,它允許基類的指針或引用指向派生類的對象,而在具體訪問時實現(xiàn)方法的動態(tài)綁定,這篇文章主要介紹了C++的動態(tài)分派在HotSpot?VM中的重要應用,需要的朋友可以參考下
    2023-09-09
  • C/C++ Qt 數(shù)據(jù)庫與Chart歷史數(shù)據(jù)展示

    C/C++ Qt 數(shù)據(jù)庫與Chart歷史數(shù)據(jù)展示

    這篇文章主要介紹了Qt利用Qchart組件展示數(shù)據(jù)庫中的歷史數(shù)據(jù)。文中的示例代碼講解清晰,具有一定的學習和工作價值,感興趣的小伙伴可以學習一下
    2021-12-12

最新評論

镇远县| 永和县| 玛纳斯县| 徐水县| 弥渡县| 天等县| 乌拉特后旗| 和田县| 彩票| 鹤峰县| 新乐市| 石楼县| 舞阳县| 枝江市| 蓬莱市| 临颍县| 鞍山市| 称多县| 南开区| 公安县| 循化| 怀集县| 昂仁县| 永顺县| 沐川县| 环江| 胶州市| 同心县| 慈溪市| 雷州市| 绥德县| 英超| 水城县| 洛宁县| 凤翔县| 文安县| SHOW| 萝北县| 榆中县| 吴旗县| 渭南市|