→ tmdggyygan: 寫錯了code裡面不是i,而是1 04/04 15:48
→ TobyH4cker: 你不會C++ 04/04 16:55
推 TobyH4cker: 連英文也不行... 04/04 16:58
→ TobyH4cker: 連截圖也 04/04 16:58
→ TobyH4cker: 不會 04/04 16:59
→ TobyH4cker: 版規也沒看 04/04 16:59
→ TobyH4cker: 換好吧 04/04 16:59
→ TobyH4cker: 換行吧 04/04 16:59
我當然不會啊XDDDD,想學才自己找資料看,自己試,見笑了
→ TobyH4cker: 應該說置底文才對 04/04 17:01
我有看過置底文,但是不太確定我犯了什麼錯誤,能否請教一下呢?
→ celen99: 樓上中文也打錯 04/04 17:13
※ 編輯: tmdggyygan (49.215.51.59), 04/04/2016 18:41:01
※ 編輯: tmdggyygan (49.215.51.59), 04/04/2016 18:46:20
→ weiclin: 就如你想的是把 + 去除, 類似 string.at(1) 04/04 20:58
推 ko27tye: 1.建議你把code貼上來 不要只有圖 2.看不懂你想幹嘛 04/04 20:59
→ ko27tye: 3.&string會丟給你string[0]的記憶體位置,但每個字元都 04/04 21:00
→ ko27tye: 有自己的記憶體位置 04/04 21:01
→ weiclin: 由於回傳的是 reference, 取 & 就會變成 char* 04/04 21:02
→ ko27tye: 你寫&code[1]就是把那個字串的第二個字記憶體位置show出 04/04 21:02
→ weiclin: 這個 char* 指向 string 儲存資料的空間 04/04 21:14
→ weiclin: 所以你就可以像在用 char array 那樣使用它 04/04 21:14
謝謝大家的回答,我開電腦把code放上來
※ 編輯: tmdggyygan (49.215.51.59), 04/04/2016 22:04:57
※ 編輯: tmdggyygan (49.215.51.59), 04/04/2016 22:35:46
→ tmdggyygan: wei大你好,所以無論我是否有宣告指標,只要我程式中有 04/04 22:40
→ tmdggyygan: 用到& 系統會自動視我的字串為指標嗎?還是字串本身 04/04 22:41
→ tmdggyygan: 就有這個特性呢? 04/04 22:41
→ tmdggyygan: wei大,在請教一下,為何各位前輩都說是char呢? 04/04 22:46
→ tmdggyygan: 我宣告的是字串呀@@ 04/04 22:46
→ tmdggyygan: 我知道字串是一串字元,但是各位前輩這樣的講法是通用 04/04 22:47
→ tmdggyygan: 的嗎? 04/04 22:47
→ tmdggyygan: ko大您好,對於您剛剛的解釋我又做了一次測試 04/04 22:50
→ tmdggyygan: cout << &code[1] << "\t" << &code << "\t" << &code 04/04 22:50
→ tmdggyygan: cout << &code[1] << "\t" << &code << "\t" << &code 04/04 22:51
→ tmdggyygan: [0] << "\t" << &code[1] << "\t" << &code[2]; 04/04 22:52
→ tmdggyygan: 結果出來的結果是 04/04 22:53
→ tmdggyygan: iluh 0x6afee8 .iluh iluh luh 04/04 22:54
→ tmdggyygan: sorry,電腦板用不太習慣= ="蠻雜亂的 04/04 22:54
推 ko27tye: sorry我回答錯了 解釋:goo.gl/GySmGn 04/05 00:49
→ ko27tye: <<運算元重載到const char* 所以變成字串從[n]個開始往後 04/05 00:53
推 ko27tye: 另外你想消除+字元的話 你可以參考assign函式的用法 04/05 01:13
感謝解答,對我幫助很大,受教了
→ twitcha101: &code[1] 是你i的記憶體位子,std輸出把他判為 %s,然 04/05 02:23
→ twitcha101: 後他會他會讀到 /n為止 04/05 02:25
→ twitcha101: 抱歉更正 ,是\0 04/05 02:30
→ twitcha101: 你會覺得奇怪是因為 cout會自動把字串指標,直接轉印 04/05 02:44
→ twitcha101: 成字串 04/05 02:45
對!因為我想說&這個取址運算子應該只有我有用指標才會用得到,怎麼會在我沒有宣告指標的情況下出現不一樣的功能,感謝解答
推 weiclin: 指標就是記憶體位址, 所以你可以宣告 char *p = &code[1] 04/05 04:40
→ weiclin: 我想你搞不懂的地方應該是 std::string 怎麼運作的 04/05 04:41
→ weiclin: string內部會管理一塊記憶體位址用來儲存資料 04/05 04:44
→ weiclin: 在不支援string的地方,你需要有辦法將string變成char* 04/05 04:48
→ weiclin: 例如用到某些 C 語言實作的 API, 就不會支援 string 04/05 04:49
→ weiclin: 所以會用到 .c_str .data .at 或陣列運算子 04/05 05:02
→ weiclin: c++11以前,string內部的記憶可能不連續,或非null ending 04/05 05:03
→ weiclin: 所以 .c_str 用來確保你拿到合法的 char array 04/05 05:04
→ weiclin: 而後面三個方法你會直接拿到string內部那塊記憶體 04/05 05:04
→ weiclin: 所以 string[0] 是內部的第一個字元(by reference) 04/05 05:05
→ weiclin: &string[0] 就是取得內部記憶體第一個字元的指標 04/05 05:06
→ weiclin: 你可以用來代替 .c_str 但是風險自負 04/05 05:13
→ weiclin: c++11之後就可以很安全的用 &string[0] 代替 .c_str 04/05 05:14
→ weiclin: 因為c++標準規定string內部應該是連續且null terminated 04/05 05:15
→ weiclin: 上面那句更正, 是c++11標準 04/05 05:15
→ weiclin: 我們用 std::string 來幫我們管理字串的 malloc 及 free 04/05 05:20
→ weiclin: 然後又對 string 取得的記憶體區塊上下其手,就是這樣了 04/05 05:22
另外再次感謝回答的ko大以及tw大,受益良多,人間有溫暖,處處有溫情XDDDD
amazing!!wei大解決了另外的一個問題,又幫我科普了字串的一些運作模式,這些寶貴的經驗是書上跟網路上查不到的,謝謝您
※ 編輯: tmdggyygan (49.215.51.59), 04/05/2016 07:45:54
※ 編輯: tmdggyygan (49.215.51.59), 04/05/2016 07:46:56
※ 編輯: tmdggyygan (49.215.51.59), 04/05/2016 07:52:08
※ 編輯: tmdggyygan (49.215.51.59), 04/05/2016 07:53:35