溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C語(yǔ)言怎么實(shí)現(xiàn)strcpy與strcat函數(shù)

發(fā)布時(shí)間:2022-04-11 09:10:57 來(lái)源:億速云 閱讀:254 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“C語(yǔ)言怎么實(shí)現(xiàn)strcpy與strcat函數(shù)”,在日常操作中,相信很多人在C語(yǔ)言怎么實(shí)現(xiàn)strcpy與strcat函數(shù)問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”C語(yǔ)言怎么實(shí)現(xiàn)strcpy與strcat函數(shù)”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

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

    1.函數(shù)的聲明

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

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

    • 將源指向的字符串復(fù)制到目標(biāo)指向的數(shù)組中,包括終止空字符(并在該點(diǎn)停止)。

    • 源字符串必須以 '\0' 結(jié)束。

    • 會(huì)將源字符串中的 '\0' 拷貝到目標(biāo)空間。

    • 目標(biāo)空間必須足夠大,以確保能存放源字符串。

    • 目標(biāo)空間必須可變。

    3.函數(shù)的使用

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

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

    C語(yǔ)言怎么實(shí)現(xiàn)strcpy與strcat函數(shù)

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

    1.模擬分析

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

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

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

    4.為了實(shí)現(xiàn)鏈?zhǔn)皆L問(wèn),我們要將傳進(jìn)來(lái)的目標(biāo)起始地址(destination)返回。由于這個(gè)函數(shù)在執(zhí)行的時(shí)候會(huì)改變destination存儲(chǔ)的內(nèi)容,所以我們要重新創(chuàng)建一個(gè)char*類型的指針來(lái)存儲(chǔ)這個(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 ch2[7] = "abcdef";
    	char ch3[10];//ch3為目標(biāo)數(shù)組,空間必須比ch2大
    	my_strcpy(ch3, ch2);//將ch2中的字符串復(fù)制到ch3中
    	printf("%s\n", my_strcpy(ch3, ch2));//鏈?zhǔn)皆L問(wèn)
    	return 0;
    }

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

    C語(yǔ)言怎么實(shí)現(xiàn)strcpy與strcat函數(shù)

    三、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 ch2[4] = "def";
    	char ch3[7] = "abc"; //ch3為目標(biāo)數(shù)組,空間必須比ch2大
    	strcat(ch3, ch2); //將ch2中的字符串追加到ch3中
    	printf("%s", ch3);
    	return 0;
    }

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

    C語(yǔ)言怎么實(shí)現(xiàn)strcpy與strcat函數(shù)

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

    1.模擬分析

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

    2.因?yàn)槲覀冊(cè)粗赶虻淖址遣恍枰淖兊?,所以我們需要將我們?cè)粗赶虻淖址胏onst限制,以防它被改變,讓其變得更安全。

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

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

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

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

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

    C語(yǔ)言怎么實(shí)現(xiàn)strcpy與strcat函數(shù)

    到此,關(guān)于“C語(yǔ)言怎么實(shí)現(xiàn)strcpy與strcat函數(shù)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI