[問題] 一個string的奇怪問題

看板C_and_CPP作者時間10年前 (2015/05/18 21:01), 編輯推噓0(0011)
留言11則, 5人參與, 最新討論串1/1
string s1("abc"); char *p=&s1[2]; cout<<*p<<endl; //印出c cout<<p<<endl; //印出c <= why? 為何最後一行印出來的不是地址? 目前卡關中,有請各位解惑 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.25.242.77 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1431954067.A.AFE.html

05/18 21:05, , 1F
cout << (void*)p << endl;
05/18 21:05, 1F

05/18 21:06, , 2F
因為char*同時也可是字串,所以iostream自作聰明
05/18 21:06, 2F

05/18 21:18, , 3F
感謝樓上!
05/18 21:18, 3F

05/18 21:19, , 4F
阿不然你想 p="c" 後 cout << p會跑出什麼
05/18 21:19, 4F

05/18 23:25, , 5F
我認為應該印出指向'c'的位址,像是0x5c1450
05/18 23:25, 5F

05/18 23:27, , 6F
但我忘了char *是C式字串,會從指到的位址一直印到'\0'
05/18 23:27, 6F

05/19 00:31, , 7F
好危險的寫法...
05/19 00:31, 7F

05/19 07:38, , 8F
是阿,char *當字串印出,這是規定的
05/19 07:38, 8F

05/23 00:32, , 9F
危險地方應是在於s1如果賦值或修改後,p可能指向無效位址
05/23 00:32, 9F

05/24 14:36, , 10F
樓上意思是賦予超過s1分配空間的字串,會重新分配空間
05/24 14:36, 10F

05/24 14:37, , 11F
p指的位置就不是s1新分配空間的位置,是這個意思嗎?
05/24 14:37, 11F
文章代碼(AID): #1LMUAJh- (C_and_CPP)