C語(yǔ)言 字符串連接函數(shù)strcat()與strncat()
strcat()與strncat()都是C語(yǔ)言中實(shí)現(xiàn)兩個(gè)字符串連接的函數(shù)。
(1)調(diào)用方式
strcat(字符數(shù)組,字符串)
(2)函數(shù)功能:把“字符串”連接到“字符數(shù)組”中的字符串尾端,并存儲(chǔ)于“字符數(shù)組”中?!白址麛?shù)組”中原來(lái)的結(jié)束標(biāo)志被“字符串”的第一個(gè)字符覆蓋,而“字符串”在操作中未被修改。
(3)說(shuō)明
①由于沒(méi)有邊界檢查,編程者要注意保證“字符數(shù)組”定義得足夠大,以便容納連接后的目標(biāo)字符串;否則會(huì)因長(zhǎng)度不夠而產(chǎn)生問(wèn)題。
②連接前兩個(gè)字符串都有結(jié)束標(biāo)志'\0'連接后“字符數(shù)組”中存儲(chǔ)的字符串的結(jié)束標(biāo)志'\0'被舍棄,只在目標(biāo)串的最后保留一個(gè)'\0'。
例如:
char strl[20]=" Hello";
char str2[10]=" Boy!";
strcat(strl,str2);
連接前str1
H | e | l | l | o | \o | \0 | \0 | \o | \0 | \0 | \0 | \0 | \0 | \0 | \0 | \0 | \0 | \0 | \0 |
連接前str2 | |||||||||||||||||||
B | o | y | ! | \0 | \0 | \0 | \0 | \0 | |||||||||||
連接后str1 | |||||||||||||||||||
H | e | l | l | o | B | o | y | ! | \0 | \0 | \0 | \0 | \0 | \0 | \0 | \0 | \0 | \0 |
③字符數(shù)組必須是字符數(shù)組名的形式,而后面的字符串既可以是一個(gè)字符數(shù)組,也可以是字符串常量。例如:
strcat (strl, "Boy!");
④如果不對(duì)字符數(shù)組賦值,則字符數(shù)組中的各內(nèi)容是無(wú)法預(yù)知的,所以如果使用類(lèi)似如下程序:
char str1[20];
char str2[10]=" Boy!";
strcat(strl,str2);
運(yùn)行時(shí)可能會(huì)報(bào)內(nèi)存讀寫(xiě)錯(cuò)誤。
(4)實(shí)現(xiàn)strcato函數(shù)功能的代碼為:
char strl[20]=" Hello";
char str2[10]=" Boy";
int i,j,k;
for(i=0;strl[i]!='\0';i++); /*i是str1的實(shí)際長(zhǎng)度 */
for(j=0;str2[j]!='\0';j++); /*j是str2的實(shí)際長(zhǎng)度 */
for(k=0;k<j;k++) /*將str2的內(nèi)存逐個(gè)賦值到str1中 */
{
strl[i+k]=str2[k];
}
strl[i+k]=0; /*添加字符串結(jié)束標(biāo)志,'\0'也可以寫(xiě)成0 */
點(diǎn)擊加載更多評(píng)論>>