全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1025
推到 Plurk!
推到 Facebook!

AnsiString 指標一問

缺席
BGman
初階會員


發表:28
回覆:85
積分:42
註冊:2003-01-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-06 15:16:06 IP:211.22.xxx.xxx 未訂閱
我用了 ComboBox 的 AddObject 將一個AnsiString陣列 加入ComboBox 的 Item 中 AnsiString MyStr[2]; MyStr[0] = "aaa"; MyStr[1] = "bbb"; 利用 for 迴圈填資料 ComboBox1->Items->AddObject( IntToStr(i ++), (TObject *)&MyStr[i]); 然後在 ComboBox1Change() 將 Object 轉型後取出 AnsiString ReceptorStr = ((AnsiString *)(ComboBox1->Items->Objects[ComboBox1->ItemIndex]))->c_str(); ShowMessage(pStr); 之前只有轉型後想要直接使用,雖然Compiler 會過,可是一執行到ShowMessage 就會發生記憶體錯誤,直到我試著呼叫 c_str() 才正常 我想請問一下幕後的原理,為什麼需要呼叫這個函式? c_str()
BGman
初階會員


發表:28
回覆:85
積分:42
註冊:2003-01-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-06 15:17:53 IP:211.22.xxx.xxx 未訂閱
小弟百思不解,究竟幕後的原理是什麼? 這一次,我不用AnsiString陣列,只放一個AnsiString,可是一直發生錯誤 AnsiString aStr = "ccc"; ComboBox1->Items->AddObject("123", (TObject *)&aStr); 一樣在 ComboBox1Change() 將 Object 轉型後取出 AnsiString pStr = ((AnsiString *)(ComboBox1->Items->Objects[ComboBox1->ItemIndex]))->c_str();
BGman
初階會員


發表:28
回覆:85
積分:42
註冊:2003-01-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-06 16:20:34 IP:211.22.xxx.xxx 未訂閱
我已經研究出來,是因為AnsiString 的CopyConstruct 格式AnsiString(&AnsiString) 所以只能用AnsiString不能為 *AnsiString 我只好應用AnsiString(*char) 但是我的問題只解決一半,因為當我不用陣列處理時 得到的結果始終是亂碼
BGman
初階會員


發表:28
回覆:85
積分:42
註冊:2003-01-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-06 17:12:18 IP:211.22.xxx.xxx 未訂閱
原來我忽略了變數的生存週期,在 FormCreate 結束時,我所宣告的 AnsiString 已經不在了, 抱歉佔了一些版面!
系統時間:2024-05-03 12:28:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!