亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

怎樣理解“strcat在使用時s1與s2指的內存空間不能重疊”

怎樣理解“strcat在使用時s1與s2指的內存空間不能重疊”

C
小霧3378873 2016-06-15 13:50:26
查看完整描述

3 回答

已采納
?
super_mb

TA貢獻101條經驗 獲得超107個贊

我覺得strcat函數的功能應該是這樣實現的:

while(*s1) ?//讀到s1的結尾

{

????????s1++;

}

while(*s1++ = *s2++) ?//將s2拼接到s1后面

{

????????NULL;

}

照上面的代碼來看,如果s1和s2內存空間是重疊的,那么s2和s1的結尾肯定是一樣的,則當你把s2的每一個字符加到s1后,s2本身最后也會加上這個字符,于是第二個循環會一直循環下去。?所以規定不能重疊吧。

查看完整回答
4 反對 回復 2016-06-15
  • 小霧3378873
    小霧3378873
    *s1什么意思, *s1++=*s2++更不看不懂了 能解釋下么
  • super_mb
    super_mb
    這里的s1和s2都是strcat函數里面定義的局部變量,各自指向第一個和第二個字符串。s1是個指針,則*s1是取其每一位的字符的值,循環里面一直往下讀,直到最后為'\0'退出循環,這時候s1指向第一個字符串結尾,第二個就是將第二個字符串的每一位賦給第一位的結尾,賦值完后,s1和s2都++,即指向下一個字符,而while判斷的是s2所指向的當前字符。所以當把s2的結束符賦到第一個字符串的最后,這時候再判斷,while('\0')就跳出循環了。
  • 小霧3378873
    小霧3378873
    非常感謝
?
慕村2869945

TA貢獻1條經驗 獲得超0個贊

strcat


查看完整回答
反對 回復 2017-03-03
  • 3 回答
  • 0 關注
  • 2302 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號