看板 C_and_CPP 關於我們 聯絡資訊
小弟是c++新手,以前都是走java的,想請問一個很基本的問題。 1: char *tmp = "test"; 2: char tmp[] = "test"; 這兩種方式,第二種會自動在結尾加上 '\0' ,所以size是5。 而第一種不會在結尾加上 '\0',所以size是4。 想請問一下,這兩種方式,優缺點是什麼呢?實務上大家比較喜歡用哪一種方式? 又,第一種不會加上結束字元,會遇到什麼可能的問題嗎? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.30.33
suhorng:第一種是指標 指向存著的 "test" 字串 08/02 18:21
suhorng:不管字串多長第一種的 size 都固定 08/02 18:21
diabloevagto:第一種是指標,在使用前要先new 08/02 18:24
diabloevagto:而且需要自己delet 08/02 18:24
diabloevagto:第二種是陣列,使用上比較方便,不過比較不彈性 08/02 18:25
suhorng:= "abcd" 這種不用處理記憶體問題.... 08/02 18:25
Nt1:謝謝~有點感覺了,請問樓上說的"不用處理記憶體問題" 指的是? 08/02 18:27
diabloevagto:因為第二種不是動態配置,所以你不用去處理記憶體 08/02 18:46
lsc36:1: sizeof(tmp) = sizeof(char*) = 4 08/02 20:53
lsc36:2: sizeof(tmp) = sizeof(char[5]) = 5 08/02 20:54
Nt1:瞭解了!!謝謝各位! 08/02 22:54
suhorng:如下一篇所述 第一種做法不會有任何記憶體管理的需求與問 08/02 23:12
suhorng:題 也不用new也不用delete 音為你是下一篇講的那樣 把指標 08/02 23:13
suhorng:指到一個已經存在 唯讀的地方 不能有任何變更 也不會有任 08/02 23:13
suhorng:動態記憶體要做的事 08/02 23:14
diabloevagto:可能我講的不太清楚@@ 08/02 23:44
diabloevagto:我指的n記憶體管理,是想表達如果第一種方法 08/02 23:45
diabloevagto:如果要變更字串內容的話需要自己管理記憶體 08/02 23:46
diabloevagto:需要在重新宣告一個新的空間來讓pointer指向 08/02 23:46