作者legnaleurc (CA)
看板C_and_CPP
標題Re: [問題] 指標字串和字元陣列的差異
時間Thu Aug 2 18:58:09 2012
※ 引述《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
→ legnaleurc:想驗證的話把"test"改成長一點的字串就行 08/02 18:59
→ chunhsiang:樓上是對了! 兩種的差別在於實際存放的位置不同 08/02 20:21
→ chunhsiang:動態配置的話 則是在heap段 08/02 20:22
→ chunhsiang:三種放的位置不同 08/02 20:24
推 EdisonX:推!! (補 , .rtext 指的應是 rodata section ) 08/02 20:59
推 Nt1:謝謝!超清楚的 08/03 00:30
→ legnaleurc:喔,對,我打錯了,是 data section 沒錯 08/03 01:32