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

看板C_and_CPP (C/C++)作者 (CA)時間13年前 (2012/08/02 18:58), 編輯推噓2(205)
留言7則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《Nt1 (用功點吧!)》之銘言: : 小弟是c++新手,以前都是走java的,想請問一個很基本的問題。 : 1: char *tmp = "test"; : 2: char tmp[] = "test"; : 這兩種方式,第二種會自動在結尾加上 '\0' ,所以size是5。 : 而第一種不會在結尾加上 '\0',所以size是4。 錯,兩種都會在結尾加上 '\0' 第一種 size 是 4 是因為那是 tmp 指標的大小 原理是 第一種是把 test\0 放到程式的 .rtext 區段(一個唯讀的常數區) 再用一個指標指向它,你不能更改字串內容,也只能用 strlen 知道長度 正確的寫法是 const char * tmp = "test"; 所有的 string literal 都是唯讀的 第二種是編譯器知道 test\0 佔五個 byte,所以它自動決定陣列的大小 把 test\0 填進陣列 這個陣列的內容是可修改的 : 想請問一下,這兩種方式,優缺點是什麼呢?實務上大家比較喜歡用哪一種方式? : 又,第一種不會加上結束字元,會遇到什麼可能的問題嗎? : 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.198.231

08/02 18:59, , 1F
想驗證的話把"test"改成長一點的字串就行
08/02 18:59, 1F

08/02 20:21, , 2F
樓上是對了! 兩種的差別在於實際存放的位置不同
08/02 20:21, 2F

08/02 20:22, , 3F
動態配置的話 則是在heap段
08/02 20:22, 3F

08/02 20:24, , 4F
三種放的位置不同
08/02 20:24, 4F

08/02 20:59, , 5F
推!! (補 , .rtext 指的應是 rodata section )
08/02 20:59, 5F

08/03 00:30, , 6F
謝謝!超清楚的
08/03 00:30, 6F

08/03 01:32, , 7F
喔,對,我打錯了,是 data section 沒錯
08/03 01:32, 7F
文章代碼(AID): #1G6br4Xo (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1G6br4Xo (C_and_CPP)