課程
/后端開發
/C
/C語言入門
為什么先拼接再拷貝不行呢。。。
2015-01-28
源自:C語言入門 6-8
正在回答
首先你得知道:
s1是一個長度為100的字符數組。
s2是一個長度為4的字符數組。這是因為雖然你在聲明時沒有指定數組的長度,但是你用一個長度為4的字符串初始化s2,所以編譯器自動將s2的長度確定為4。
s3是一個長度為4的字符數組。道理同上。
strcat(s2, s3) 這個函數是將s3中的內容(包括s3結尾的'\0')復制到s2中最后一個字符的后面(覆蓋掉s2原來結尾的'\0'),這樣就能把兩個字符串中的字符連起來了,并且還是'\0'結尾。
注意:這就需要s2有足夠的長度來容納這么多的字符,長度至少為 strlen(s2) + strlen(s3) + 1,最后這個1就是結尾的'\0'。
但是你的s2長度只有4,所以寫越界了。而后面的字符有可能寫入到了后面,也有可能無法成功寫入而發生錯誤。
為什么說是有可能呢? 因為strcat這個函數就是從s2的最后寫入s3的內容,它不管你這個字符串到底要寫多長,也不知道容納它的數組有多長,其實它都不知道你的字符串是不是在數組中,它只是單純地在內存中往后寫。所以很可能寫出界,更糟的是可能會覆蓋掉后面的東西,引起各種各樣的錯誤,甚至是崩潰! ?所以在真實的開發中千萬要注意數組訪問越界的問題。
在本站中它判斷你寫了?strcat( s1 , s3 ) 才算寫對。因為s1足夠長。
天再高又怎樣 提問者
我懂了
謝謝啦
但是我那樣做就顯示不出來結果了,...
這個只是個練習,可以按你說的,這里主要的目的是讓大家對該方法的使用有個認知和練習
舉報
C語言入門視頻教程,帶你進入編程世界的必修課-C語言
2 回答strcat與strcpy
3 回答關于strcat和strcpy
2 回答一會strcpy,一會strcat...
1 回答先strcat(s2,s3),然后strcpy(s1,s2)
2 回答C語言中關于strcat和strcpy的使用問題
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2015-01-28
首先你得知道:
s1是一個長度為100的字符數組。
s2是一個長度為4的字符數組。這是因為雖然你在聲明時沒有指定數組的長度,但是你用一個長度為4的字符串初始化s2,所以編譯器自動將s2的長度確定為4。
s3是一個長度為4的字符數組。道理同上。
strcat(s2, s3) 這個函數是將s3中的內容(包括s3結尾的'\0')復制到s2中最后一個字符的后面(覆蓋掉s2原來結尾的'\0'),這樣就能把兩個字符串中的字符連起來了,并且還是'\0'結尾。
注意:這就需要s2有足夠的長度來容納這么多的字符,長度至少為 strlen(s2) + strlen(s3) + 1,最后這個1就是結尾的'\0'。
但是你的s2長度只有4,所以寫越界了。而后面的字符有可能寫入到了后面,也有可能無法成功寫入而發生錯誤。
為什么說是有可能呢? 因為strcat這個函數就是從s2的最后寫入s3的內容,它不管你這個字符串到底要寫多長,也不知道容納它的數組有多長,其實它都不知道你的字符串是不是在數組中,它只是單純地在內存中往后寫。所以很可能寫出界,更糟的是可能會覆蓋掉后面的東西,引起各種各樣的錯誤,甚至是崩潰! ?所以在真實的開發中千萬要注意數組訪問越界的問題。
在本站中它判斷你寫了?strcat( s1 , s3 ) 才算寫對。因為s1足夠長。
2015-03-03
我懂了
2015-01-28
謝謝啦
但是我那樣做就顯示不出來結果了,...
2015-01-28
這個只是個練習,可以按你說的,這里主要的目的是讓大家對該方法的使用有個認知和練習