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

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么不可以先將字符串連接再拷貝?

#include <stdio.h>

#include <string.h>

int main()

{

? ? char s1[100]="";

? ? char s2[]="我愛,";

? ? char s3[]="慕課網";

? ? /*在以下補全代碼*/

? ? strcat(s2,s3);///////////////////////

? ? strcpy(s1,s2);//////////////////////

? ? printf("%s\n",s1);

? ? return 0; ? ?

}


正在回答

1 回答

正文:

首先,s1、s2 和 s3 都是什么:

s1是一個長度為100的字符數組。

s2是一個長度為4的字符數組。這是因為雖然你在聲明時沒有指定數組的長度,但是你用一個長度為4的字符串初始化s2,所以編譯器自動將s2的長度確定為4。

s3是一個長度為4的字符數組。道理同上。

再說strcat函數會干什么:

strcat(s2, s3) 這個函數是將s3中的內容(包括s3結尾的'\0')復制到s2中最后一個字符的后面(覆蓋掉s2原來結尾的'\0'),這樣就能把兩個字符串中的字符連起來了,并且還是'\0'結尾。

注意:這就需要s2有足夠的長度來容納這么多的字符,長度至少為?strlen(s2) + strlen(s3) + 1,最后這個1就是結尾的'\0'。

但是你的s2長度只有4,所以寫越界了。在調用用strcat、strcpy之類的函數時一定要注意是否有足夠的存儲空間來容納你要操作的字符。如果你越界了,你的代碼是可以編譯通過的,但在運行的時候很可能就會發生錯誤,這就是所謂的“緩沖區溢出”錯誤,可能會引起嚴重的問題。

在本站的這個題目中,它看到你寫了 strcat(s1, ...) 這樣的代碼才算對,因為s1的空間足夠多。


1 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為什么不可以先將字符串連接再拷貝?

我要回答 關注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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