課程
/后端開(kāi)發(fā)
/C
/C語(yǔ)言入門(mén)
但是strcat(strcat(s1,s2),s3);就行了呢
2015-07-03
源自:C語(yǔ)言入門(mén) 6-8
正在回答
先說(shuō)明:
strcat(s1,?strcat(s2,?s3));??//?相當(dāng)于: strcat(s2,?s3);??//?先把s3接到s2后面 strcat(s1,?s2);??//?再把s2接到s1后面 strcat(strcat(s1,?s2),?s3);??//?相當(dāng)于: strcat(s1,?s2);??//?先把s2接到s1后面 strcat(s1,?s3);??//?再把s3接到s1后面
再看看s1、s2 和 s3 都是什么:
s1是一個(gè)長(zhǎng)度為100的字符數(shù)組。
s2是一個(gè)長(zhǎng)度為4的字符數(shù)組。這是因?yàn)殡m然你在聲明時(shí)沒(méi)有指定數(shù)組的長(zhǎng)度,但是你用一個(gè)長(zhǎng)度為4的字符串初始化s2,所以編譯器自動(dòng)將s2的長(zhǎng)度確定為4。
s3是一個(gè)長(zhǎng)度為4的字符數(shù)組。道理同上。
再說(shuō)strcat函數(shù)會(huì)干什么:
strcat(s2, s3) 這個(gè)函數(shù)是將s3中的內(nèi)容(包括s3結(jié)尾的'\0')復(fù)制到s2中最后一個(gè)字符的后面(覆蓋掉s2原來(lái)結(jié)尾的'\0'),這樣就能把兩個(gè)字符串中的字符連起來(lái)了,并且還是'\0'結(jié)尾。
注意:這就需要s2有足夠的長(zhǎng)度來(lái)容納這么多的字符,長(zhǎng)度至少為?strlen(s2) + strlen(s3) + 1,最后這個(gè)1就是結(jié)尾的'\0'。
但是你的s2長(zhǎng)度只有4,所以寫(xiě)越界了。在調(diào)用用strcat、strcpy之類(lèi)的函數(shù)時(shí)一定要注意是否有足夠的存儲(chǔ)空間來(lái)容納你要操作的字符。如果你越界了,你的代碼是可以編譯通過(guò)的,但在運(yùn)行的時(shí)候很可能就會(huì)發(fā)生錯(cuò)誤,這就是所謂的“緩沖區(qū)溢出”錯(cuò)誤,可能會(huì)引起嚴(yán)重的問(wèn)題。
在本站的這個(gè)題目中,它看到你寫(xiě)了 strcat(s1, ...) 這樣的代碼才算對(duì),因?yàn)閟1的空間足夠多。
舉報(bào)
C語(yǔ)言入門(mén)視頻教程,帶你進(jìn)入編程世界的必修課-C語(yǔ)言
2 回答為什么strcat(s2,s3); strcat(s1,s2);不能這樣寫(xiě)?
1 回答 s1=strcat(s2,s3);為什么不可以?
1 回答先strcat(s2,s3),然后strcpy(s1,s2)
1 回答為啥strcat(s2,s3);不行
2 回答為啥先strcat(s2,s3);再strcpy(s1,s2);會(huì)報(bào)錯(cuò)?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢(xún)優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2015-07-03
先說(shuō)明:
再看看s1、s2 和 s3 都是什么:
s1是一個(gè)長(zhǎng)度為100的字符數(shù)組。
s2是一個(gè)長(zhǎng)度為4的字符數(shù)組。這是因?yàn)殡m然你在聲明時(shí)沒(méi)有指定數(shù)組的長(zhǎng)度,但是你用一個(gè)長(zhǎng)度為4的字符串初始化s2,所以編譯器自動(dòng)將s2的長(zhǎng)度確定為4。
s3是一個(gè)長(zhǎng)度為4的字符數(shù)組。道理同上。
再說(shuō)strcat函數(shù)會(huì)干什么:
strcat(s2, s3) 這個(gè)函數(shù)是將s3中的內(nèi)容(包括s3結(jié)尾的'\0')復(fù)制到s2中最后一個(gè)字符的后面(覆蓋掉s2原來(lái)結(jié)尾的'\0'),這樣就能把兩個(gè)字符串中的字符連起來(lái)了,并且還是'\0'結(jié)尾。
注意:這就需要s2有足夠的長(zhǎng)度來(lái)容納這么多的字符,長(zhǎng)度至少為?strlen(s2) + strlen(s3) + 1,最后這個(gè)1就是結(jié)尾的'\0'。
但是你的s2長(zhǎng)度只有4,所以寫(xiě)越界了。在調(diào)用用strcat、strcpy之類(lèi)的函數(shù)時(shí)一定要注意是否有足夠的存儲(chǔ)空間來(lái)容納你要操作的字符。如果你越界了,你的代碼是可以編譯通過(guò)的,但在運(yùn)行的時(shí)候很可能就會(huì)發(fā)生錯(cuò)誤,這就是所謂的“緩沖區(qū)溢出”錯(cuò)誤,可能會(huì)引起嚴(yán)重的問(wèn)題。
在本站的這個(gè)題目中,它看到你寫(xiě)了 strcat(s1, ...) 這樣的代碼才算對(duì),因?yàn)閟1的空間足夠多。