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

作者: RealJack   2015-05-18 21:01:03
string s1("abc");
char *p=&s1[2];
cout<<*p<<endl; //印出c
cout<<p<<endl; //印出c <= why?
為何最後一行印出來的不是地址?
目前卡關中,有請各位解惑
謝謝
作者: azureblaze (AzureBlaze)   2015-05-18 21:05:00
cout << (void*)p << endl;因為char*同時也可是字串,所以iostream自作聰明
作者: RealJack   2015-05-18 21:18:00
感謝樓上!
作者: MOONRAKER (㊣牛鶴鰻毛人)   2015-05-18 21:19:00
阿不然你想 p="c" 後 cout << p會跑出什麼
作者: RealJack   2015-05-18 23:25:00
我認為應該印出指向'c'的位址,像是0x5c1450但我忘了char *是C式字串,會從指到的位址一直印到'\0'
作者: dritchie (卍~邁斯納效應~卍)   2015-05-19 00:31:00
好危險的寫法...
作者: MOONRAKER (㊣牛鶴鰻毛人)   2015-05-19 07:38:00
是阿,char *當字串印出,這是規定的
作者: dirkc (3781615)   2015-05-23 00:32:00
危險地方應是在於s1如果賦值或修改後,p可能指向無效位址
作者: RealJack   2015-05-24 14:36:00
樓上意思是賦予超過s1分配空間的字串,會重新分配空間p指的位置就不是s1新分配空間的位置,是這個意思嗎?

Links booklink

Contact Us: admin [ a t ] ucptt.com