看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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