您好,登錄后才能下訂單哦!
這篇文章主要介紹“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í)吧!
char* strcpy(char * destination, const char * source );
將源指向的字符串復(fù)制到目標(biāo)指向的數(shù)組中,包括終止空字符(并在該點(diǎn)停止)。
源字符串必須以 '\0' 結(jié)束。
會(huì)將源字符串中的 '\0' 拷貝到目標(biāo)空間。
目標(biāo)空間必須足夠大,以確保能存放源字符串。
目標(biāo)空間必須可變。
#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é)果
1.我們需要將源指向的字符串復(fù)制到目標(biāo)指向的數(shù)組中,包括終止空字符,所以我們就可以一個(gè)字符一個(gè)字符的復(fù)制過(guò)去,注意終止空字符'\0'也要復(fù)制過(guò)去,如果沒(méi)有將‘\0’復(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è)地址。
下面代碼有點(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é)果
char * strcat ( char * destination, const char * source );
將源字符串追加到目標(biāo)字符串。目標(biāo)字符串的終止空字符'\0'被源字符串的第一個(gè)字符覆蓋,并包含一個(gè)終止空字符'\0'在新字符串的末尾,由兩者在目的地連接而成。
源字符串必須以 '\0' 結(jié)束。
目標(biāo)空間必須有足夠的大,能容納下源字符串的內(nèi)容。
目標(biāo)空間必須可修改。
#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é)果
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è)地址。
#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é)果
到此,關(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í)用的文章!
免責(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)容。