欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言 模擬實(shí)現(xiàn)strcpy與strcat函數(shù)詳解

 更新時(shí)間:2022年04月08日 17:22:25   作者:不一樣的煙火a  
這篇文章主要介紹了怎樣用C語言模擬實(shí)現(xiàn)strcpy與strcat函數(shù),strcpy()函數(shù)是C語言中的一個(gè)復(fù)制字符串的庫函數(shù),strcat()函數(shù)的功能是實(shí)現(xiàn)字符串的拼接

這里有超詳細(xì)的函數(shù)模實(shí)現(xiàn)分享,帶大家一起來模擬實(shí)現(xiàn)這些函數(shù),后續(xù)還將更新更多的函數(shù)模擬實(shí)現(xiàn)的文章。

一、strcpy函數(shù)的介紹

1.函數(shù)的聲明

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

2.函數(shù)功能與注意事項(xiàng)

  • 將源指向的字符串復(fù)制到目標(biāo)指向的數(shù)組中,包括終止空字符(并在該點(diǎn)停止)。
  • 源字符串必須以 '\0' 結(jié)束。
  • 會將源字符串中的 '\0' 拷貝到目標(biāo)空間。
  • 目標(biāo)空間必須足夠大,以確保能存放源字符串。
  • 目標(biāo)空間必須可變。

3.函數(shù)的使用

#include<stdio.h>
#include<string.h>//使用strcpy函數(shù)時(shí)記得引用它的頭文件
 
int main()
{
	char ch1[7] = "abcdef";
	char ch2[10];//ch2為目標(biāo)數(shù)組,空間必須比ch1大
	strcpy(ch2, ch1);
	printf("%s\n", ch2);
	return 0;
}

運(yùn)行結(jié)果

二、模擬實(shí)現(xiàn)strcpy函數(shù)

1.模擬分析

1.我們需要將源指向的字符串復(fù)制到目標(biāo)指向的數(shù)組中,包括終止空字符,所以我們就可以一個(gè)字符一個(gè)字符的復(fù)制過去,注意終止空字符'\0'也要復(fù)制過去,如果沒有將‘\0’復(fù)制過去的話,后面如果想要打印將這個(gè)賦值過去的字符串的話就會出現(xiàn)問題。

2.因?yàn)槲覀冊粗赶虻淖址遣恍枰淖兊模晕覀冃枰獙⑽覀冊粗赶虻淖址胏onst限制,以防它被改變,讓其變得更安全。

3.為了避免傳進(jìn)來的地址是空指針,我們需要用assert來斷言傳進(jìn)來的地址不是空指針。

4.為了實(shí)現(xiàn)鏈?zhǔn)皆L問,我們要將傳進(jìn)來的目標(biāo)起始地址(destination)返回。由于這個(gè)函數(shù)在執(zhí)行的時(shí)候會改變destination存儲的內(nèi)容,所以我們要重新創(chuàng)建一個(gè)char*類型的指針來存儲這個(gè)地址。

2.模擬實(shí)現(xiàn)

下面代碼有點(diǎn)干,需要細(xì)品,建議收藏以免忘記。

#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* dest, const char* src)
{
	assert(dest && src);
	char* ret = dest;
	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}
int main()
{
	char ch1[7] = "abcdef";
	char ch2[10];//ch2為目標(biāo)數(shù)組,空間必須比ch1大
	my_strcpy(ch2, ch1);//將ch1中的字符串復(fù)制到ch2中
	printf("%s\n", my_strcpy(ch2, ch1));//鏈?zhǔn)皆L問
	return 0;
}

運(yùn)行結(jié)果

三、strcat函數(shù)的介紹

1.函數(shù)的聲明

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

2.函數(shù)功能與注意事項(xiàng)

  • 將源字符串追加到目標(biāo)字符串。目標(biāo)字符串的終止空字符'\0'被源字符串的第一個(gè)字符覆蓋,并包含一個(gè)終止空字符'\0'在新字符串的末尾,由兩者在目的地連接而成。
  • 源字符串必須以 '\0' 結(jié)束。
  • 目標(biāo)空間必須有足夠的大,能容納下源字符串的內(nèi)容。
  • 目標(biāo)空間必須可修改。 

3.函數(shù)的使用

#include<stdio.h>
#include<string.h>//使用strcat函數(shù)時(shí)記得引用它的頭文件
 
int main()
{
	char ch1[4] = "def";
	char ch2[7] = "abc"; //ch2為目標(biāo)數(shù)組,空間必須比ch1大
	strcat(ch2, ch1); //將ch1中的字符串追加到ch2中
	printf("%s", ch2);
	return 0;
}

運(yùn)行結(jié)果

四、模擬實(shí)現(xiàn)strcat函數(shù)

1.模擬分析

1.我們追加字符串時(shí)是將源字符串追加到目標(biāo)字符串里面,我們需要將從目標(biāo)字符串里面'\0'的位置開始追加,所以我們首先就需要找到目標(biāo)字符串中'\0'的位置。并且我們追加完后需要在字符串的追后多追加一個(gè)'\0',使這個(gè)新字符串完整。

2.因?yàn)槲覀冊粗赶虻淖址遣恍枰淖兊模晕覀冃枰獙⑽覀冊粗赶虻淖址胏onst限制,以防它被改變,讓其變得更安全。

3.為了避免傳進(jìn)來的地址是空指針,我們需要用assert來斷言傳進(jìn)來的地址不是空指針。

4.為了實(shí)現(xiàn)鏈?zhǔn)皆L問,我們要將傳進(jìn)來的目標(biāo)起始地址(destination)返回。由于這個(gè)函數(shù)在執(zhí)行的時(shí)候會改變destination存儲的內(nèi)容,所以我們要重新創(chuàng)建一個(gè)char*類型的指針來存儲這個(gè)地址。

2.模擬實(shí)現(xiàn)

#include<stdio.h>
#include<assert.h>
 
char* my_strcat(char* dest, const char* src)
{
	assert(dest && src);//斷言傳進(jìn)來的地址不是空指針
	char* ret = dest;//保存目標(biāo)起始地址
	while (*dest)//找到'\0'的地址
	{
		dest++;
	}
	while (*dest++ = *src++)//追加字符串
	{
		;
	}
	return ret;
}
int main()
{
	char ch1[4] = "def";
	char ch2[7] = "abc"; //ch2為目標(biāo)數(shù)組,空間必須比ch1大
	printf("%s\n", my_strcat(ch2, ch1));//鏈?zhǔn)皆L問
	return 0;
}

運(yùn)行結(jié)果

總結(jié)

這就是今天的全部內(nèi)容了,要是大家覺得有用的話記得給博主一個(gè)三連哦,嘻嘻。最后祝考研的同學(xué)都能上岸,找工作的同學(xué)都能進(jìn)大廠。

到此這篇關(guān)于C語言 模擬實(shí)現(xiàn)strcpy與strcat函數(shù)詳解的文章就介紹到這了,更多相關(guān)C語言 strcpy函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Qt實(shí)現(xiàn)編寫SMTP客戶端的示例詳解

    Qt實(shí)現(xiàn)編寫SMTP客戶端的示例詳解

    這篇文章主要介紹了如何通過Qt實(shí)現(xiàn)編寫SMTP客戶端,可以實(shí)現(xiàn)通過SMTP發(fā)送電子郵件(有文本,html,附件,內(nèi)聯(lián)文件等的MIME)。并支持SSL和SMTP身份驗(yàn)證,感興趣的可以學(xué)習(xí)一下
    2022-11-11
  • 深入淺析C++ traits技術(shù)

    深入淺析C++ traits技術(shù)

    traits就是提取“被傳進(jìn)的對象”對應(yīng)的返回類型,讓同一個(gè)接口實(shí)現(xiàn)對應(yīng)的功能。因?yàn)镾TL的算法和容器是分離的,兩者通過迭代器鏈接,本文通過實(shí)例代碼給大家介紹C++ traits技術(shù),感興趣的朋友一起看看吧
    2021-05-05
  • C語言實(shí)現(xiàn)簡單的三子棋游戲

    C語言實(shí)現(xiàn)簡單的三子棋游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • C/C++中的名字空間與作用域示例詳解

    C/C++中的名字空間與作用域示例詳解

    這篇文章主要給大家介紹了關(guān)于C/C++中名字空間與作用域的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用c/c++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起看看吧。
    2017-09-09
  • C++this指針詳情

    C++this指針詳情

    這篇文章主要介紹了C++this指針詳情,在 C++ 中,每一個(gè)對象都能通過 this 指針來訪問自己的地址。this 指針是所有成員函數(shù)的隱含參數(shù)。因此,在成員函數(shù)內(nèi)部,它可以用來指向調(diào)用對象,下面我們來了解更多詳細(xì)內(nèi)容吧
    2022-01-01
  • 利用Matlab繪制一個(gè)可愛的南瓜燈

    利用Matlab繪制一個(gè)可愛的南瓜燈

    這篇文章主要為大家介紹了如何利用Matlab繪制一個(gè)可愛的南瓜燈!文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Matlab有一定幫助,需要的可以參考一下
    2022-02-02
  • OpenCV實(shí)現(xiàn)特征檢測和特征匹配方法匯總

    OpenCV實(shí)現(xiàn)特征檢測和特征匹配方法匯總

    一幅圖像中總存在著其獨(dú)特的像素點(diǎn),這些點(diǎn)我們可以認(rèn)為就是這幅圖像的特征,成為特征點(diǎn),本文主要介紹了OpenCV實(shí)現(xiàn)特征檢測和特征匹配方法,感興趣的可以了解一下
    2021-08-08
  • DOS簡易版C語言貪吃蛇

    DOS簡易版C語言貪吃蛇

    這篇文章主要為大家詳細(xì)介紹了DOS簡易版C語言貪吃蛇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 如何基于 Blueprint 在游戲中創(chuàng)建實(shí)時(shí)音視頻功能

    如何基于 Blueprint 在游戲中創(chuàng)建實(shí)時(shí)音視頻功能

    我們在本文先來講講如何在 Unreal 中用 Blueprint 快速實(shí)現(xiàn)。稍后會分享基于 C++的實(shí)現(xiàn)步驟。感興趣的朋友跟隨小編一起看看吧
    2020-05-05
  • C++ 中將一維數(shù)組轉(zhuǎn)成多維的三種方式示例詳解

    C++ 中將一維數(shù)組轉(zhuǎn)成多維的三種方式示例詳解

    這篇文章主要介紹了C++ 中將一維數(shù)組轉(zhuǎn)成多維的三種方式,每種方式結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-12-12

最新評論