[問題] 十誡之四例2, 字串相加須保留足夠空間

看板C_and_CPP作者 (Howard)時間15年前 (2010/06/18 21:48), 編輯推噓6(608)
留言14則, 7人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) /* s1 宣告成陣列,並保留足夠空間存放後續要附加的內容 */ char s1[20] = "Hello, "; char *s2 = "world!"; strcat(s1, s2); 如果s1是宣告成 char s1[] = "Hello, "; 一樣可以執行。 這樣子會有什麼潛在問題嗎?或是說沒有問題呢? 謝謝。 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Dev-C++ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 117.19.227.98

06/18 21:51, , 1F
這樣 s1 的空間不足 所以 strcat 之後會蓋到不知道哪裡去
06/18 21:51, 1F

06/18 21:51, , 2F
char s1[]沒宣告大小,所以隨compiler搞,搞不好只給8
06/18 21:51, 2F

06/18 21:52, , 3F
個byte
06/18 21:52, 3F

06/18 21:56, , 4F
也不完全隨compiler搞吧?? 原則上是至少為足夠放下後面
06/18 21:56, 4F

06/18 21:57, , 5F
"Hello, "的空間, 雖然有的compiler為了variable align
06/18 21:57, 5F

06/18 21:57, , 6F
可能後面剛好有空一點; 不過基本上還是同1F L大說的.
06/18 21:57, 6F

06/18 22:03, , 7F
所以後面才說只給8個啊XD
06/18 22:03, 7F

06/18 22:03, , 8F
拍寫小弟誤會您的意思了XD
06/18 22:03, 8F

06/18 22:10, , 9F
蓋到不知名的地方debug會很痛苦…
06/18 22:10, 9F

06/18 22:11, , 10F
會發生其他變數突然自己改變數值
06/18 22:11, 10F

06/18 22:22, , 11F
感謝樓上幾位的說明,受教了,謝謝 ^^
06/18 22:22, 11F

06/18 23:38, , 12F
保險起見,請多利用 strncat 取代 strcat
06/18 23:38, 12F

06/19 06:25, , 13F
其實完全等價於 char s1[8],沒有其它解讀空間。
06/19 06:25, 13F

06/19 06:26, , 14F
就算有什麼 align 的考量,它也同樣會發生在 char s1[8]
06/19 06:26, 14F
文章代碼(AID): #1C6tarYL (C_and_CPP)