[問題] 指標字串和字元陣列的差異

看板C_and_CPP (C/C++)作者 (用功點吧!)時間13年前 (2012/08/02 18:18), 編輯推噓3(3016)
留言19則, 4人參與, 最新討論串1/2 (看更多)
小弟是c++新手,以前都是走java的,想請問一個很基本的問題。 1: char *tmp = "test"; 2: char tmp[] = "test"; 這兩種方式,第二種會自動在結尾加上 '\0' ,所以size是5。 而第一種不會在結尾加上 '\0',所以size是4。 想請問一下,這兩種方式,優缺點是什麼呢?實務上大家比較喜歡用哪一種方式? 又,第一種不會加上結束字元,會遇到什麼可能的問題嗎? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.30.33

08/02 18:21, , 1F
第一種是指標 指向存著的 "test" 字串
08/02 18:21, 1F

08/02 18:21, , 2F
不管字串多長第一種的 size 都固定
08/02 18:21, 2F

08/02 18:24, , 3F
第一種是指標,在使用前要先new
08/02 18:24, 3F

08/02 18:24, , 4F
而且需要自己delet
08/02 18:24, 4F

08/02 18:25, , 5F
第二種是陣列,使用上比較方便,不過比較不彈性
08/02 18:25, 5F

08/02 18:25, , 6F
= "abcd" 這種不用處理記憶體問題....
08/02 18:25, 6F

08/02 18:27, , 7F
謝謝~有點感覺了,請問樓上說的"不用處理記憶體問題" 指的是?
08/02 18:27, 7F

08/02 18:46, , 8F
因為第二種不是動態配置,所以你不用去處理記憶體
08/02 18:46, 8F

08/02 20:53, , 9F
1: sizeof(tmp) = sizeof(char*) = 4
08/02 20:53, 9F

08/02 20:54, , 10F
2: sizeof(tmp) = sizeof(char[5]) = 5
08/02 20:54, 10F

08/02 22:54, , 11F
瞭解了!!謝謝各位!
08/02 22:54, 11F

08/02 23:12, , 12F
如下一篇所述 第一種做法不會有任何記憶體管理的需求與問
08/02 23:12, 12F

08/02 23:13, , 13F
題 也不用new也不用delete 音為你是下一篇講的那樣 把指標
08/02 23:13, 13F

08/02 23:13, , 14F
指到一個已經存在 唯讀的地方 不能有任何變更 也不會有任
08/02 23:13, 14F

08/02 23:14, , 15F
動態記憶體要做的事
08/02 23:14, 15F

08/02 23:44, , 16F
可能我講的不太清楚@@
08/02 23:44, 16F

08/02 23:45, , 17F
我指的n記憶體管理,是想表達如果第一種方法
08/02 23:45, 17F

08/02 23:46, , 18F
如果要變更字串內容的話需要自己管理記憶體
08/02 23:46, 18F

08/02 23:46, , 19F
需要在重新宣告一個新的空間來讓pointer指向
08/02 23:46, 19F
文章代碼(AID): #1G6bG24g (C_and_CPP)
文章代碼(AID): #1G6bG24g (C_and_CPP)