課程
/后端開(kāi)發(fā)
/C
/C語(yǔ)言入門(mén)
例子中這個(gè)char s1[10]="hello";中s1[10]是什么意思
還有什么叫strcat在使用時(shí)s1和s2內(nèi)存不能一樣,實(shí)在是看不懂了
2019-02-15
源自:C語(yǔ)言入門(mén) 6-8
正在回答
咋是把s1指向的第一個(gè)內(nèi)容復(fù)制到s2的末尾呢?不應(yīng)該是把s2中的字符串復(fù)制到s1中嗎?
char?s1[10]?=?"hello";
表示在內(nèi)存中申請(qǐng)能放10個(gè)char類型的空間,并給這個(gè)空間附初始值“hello\n”('\n'表示字符串的結(jié)尾,占一個(gè)char空間)。s1的總大小是10,現(xiàn)在占用了6個(gè)空間,還剩4個(gè)空間。
strcat(s1,s2);
是把s2的內(nèi)容往s1后面加,直到s2遇到'\n'字符,所以需要s1有足夠多的空間。如果s1和s2內(nèi)存一樣,那就相當(dāng)于一個(gè)字符串往自己后面加內(nèi)容,舉個(gè)例子,s1和s2內(nèi)存一樣,都是指向內(nèi)容為“abcd\n”的內(nèi)存,那么strcat的運(yùn)行過(guò)程如下:
第一步:將s1指向的第一個(gè)內(nèi)容復(fù)制到s2的末尾,也就是將‘a(chǎn)’復(fù)制到‘d’后面,結(jié)果為“abcda”,再判斷s1指向的第一個(gè)內(nèi)容是否為‘\n’,是則結(jié)束,否則s1和s2都往后一個(gè)指;這里是否,所以進(jìn)行下一步;
第二步:將s1指向的第一個(gè)內(nèi)容復(fù)制到s2的末尾,也就是將‘b’復(fù)制到第二個(gè)‘a(chǎn)’后面,結(jié)果為“abcdab”,再判斷s1指向的第一個(gè)內(nèi)容是否為‘\n’,是則結(jié)束,否則s1和s2都往后一個(gè)指;這里是否,所以進(jìn)行下一步;
第三步:將s1指向的第一個(gè)內(nèi)容復(fù)制到s2的末尾,也就是將‘c’復(fù)制到第二個(gè)‘b’后面,結(jié)果為“abcdabc”,再判斷s1指向的第一個(gè)內(nèi)容是否為‘\n’,是則結(jié)束,否則s1和s2都往后一個(gè)指;這里是否,所以進(jìn)行下一步;
第四步:將s1指向的第一個(gè)內(nèi)容復(fù)制到s2的末尾,也就是將‘d’復(fù)制到第二個(gè)‘c’后面,結(jié)果為“abcdabcd”,再判斷s1指向的第一個(gè)內(nèi)容是否為‘\n’,是則結(jié)束,否則s1和s2都往后一個(gè)指;這里是否,所以進(jìn)行下一步;
第五步:將s1指向的第一個(gè)內(nèi)容復(fù)制到s2的末尾,也就是將第二個(gè)‘a(chǎn)’復(fù)制到第二個(gè)‘d’后面,結(jié)果為“abcdabcda”,再判斷s1指向的第一個(gè)內(nèi)容是否為‘\n’,是則結(jié)束,否則s1和s2都往后一個(gè)指;這里是否,所以進(jìn)行下一步;
。。。。。。
會(huì)發(fā)現(xiàn),s1的第一個(gè)內(nèi)容永遠(yuǎn)不會(huì)是‘\n’(結(jié)束符),所以就這樣一直死循環(huán)下去了。(這里的s1和s2在實(shí)際代碼中會(huì)換成工作指針,這里為了更明了,就不替換為工作指針了)
白腿小隼熊貓鳥(niǎo)
Howard229 回復(fù) 白腿小隼熊貓鳥(niǎo)
蘇洋哈哈
舉報(bào)
C語(yǔ)言入門(mén)視頻教程,帶你進(jìn)入編程世界的必修課-C語(yǔ)言
2 回答萌新第一次問(wèn)問(wèn)題
3 回答萌新提問(wèn)
1 回答萌新提問(wèn) 環(huán)境
3 回答萌新求問(wèn)。。。。
3 回答【萌新】關(guān)于這道題提出的問(wèn)題
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2019-12-27
咋是把s1指向的第一個(gè)內(nèi)容復(fù)制到s2的末尾呢?不應(yīng)該是把s2中的字符串復(fù)制到s1中嗎?
2019-02-16
表示在內(nèi)存中申請(qǐng)能放10個(gè)char類型的空間,并給這個(gè)空間附初始值“hello\n”('\n'表示字符串的結(jié)尾,占一個(gè)char空間)。s1的總大小是10,現(xiàn)在占用了6個(gè)空間,還剩4個(gè)空間。
是把s2的內(nèi)容往s1后面加,直到s2遇到'\n'字符,所以需要s1有足夠多的空間。如果s1和s2內(nèi)存一樣,那就相當(dāng)于一個(gè)字符串往自己后面加內(nèi)容,舉個(gè)例子,s1和s2內(nèi)存一樣,都是指向內(nèi)容為“abcd\n”的內(nèi)存,那么strcat的運(yùn)行過(guò)程如下:
第一步:將s1指向的第一個(gè)內(nèi)容復(fù)制到s2的末尾,也就是將‘a(chǎn)’復(fù)制到‘d’后面,結(jié)果為“abcda”,再判斷s1指向的第一個(gè)內(nèi)容是否為‘\n’,是則結(jié)束,否則s1和s2都往后一個(gè)指;這里是否,所以進(jìn)行下一步;
第二步:將s1指向的第一個(gè)內(nèi)容復(fù)制到s2的末尾,也就是將‘b’復(fù)制到第二個(gè)‘a(chǎn)’后面,結(jié)果為“abcdab”,再判斷s1指向的第一個(gè)內(nèi)容是否為‘\n’,是則結(jié)束,否則s1和s2都往后一個(gè)指;這里是否,所以進(jìn)行下一步;
第三步:將s1指向的第一個(gè)內(nèi)容復(fù)制到s2的末尾,也就是將‘c’復(fù)制到第二個(gè)‘b’后面,結(jié)果為“abcdabc”,再判斷s1指向的第一個(gè)內(nèi)容是否為‘\n’,是則結(jié)束,否則s1和s2都往后一個(gè)指;這里是否,所以進(jìn)行下一步;
第四步:將s1指向的第一個(gè)內(nèi)容復(fù)制到s2的末尾,也就是將‘d’復(fù)制到第二個(gè)‘c’后面,結(jié)果為“abcdabcd”,再判斷s1指向的第一個(gè)內(nèi)容是否為‘\n’,是則結(jié)束,否則s1和s2都往后一個(gè)指;這里是否,所以進(jìn)行下一步;
第五步:將s1指向的第一個(gè)內(nèi)容復(fù)制到s2的末尾,也就是將第二個(gè)‘a(chǎn)’復(fù)制到第二個(gè)‘d’后面,結(jié)果為“abcdabcda”,再判斷s1指向的第一個(gè)內(nèi)容是否為‘\n’,是則結(jié)束,否則s1和s2都往后一個(gè)指;這里是否,所以進(jìn)行下一步;
。。。。。。
會(huì)發(fā)現(xiàn),s1的第一個(gè)內(nèi)容永遠(yuǎn)不會(huì)是‘\n’(結(jié)束符),所以就這樣一直死循環(huán)下去了。(這里的s1和s2在實(shí)際代碼中會(huì)換成工作指針,這里為了更明了,就不替換為工作指針了)