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

AnsiString的array如何回傳?

尚未結案
Wuei
一般會員


發表:10
回覆:11
積分:4
註冊:2003-08-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-01 15:00:14 IP:210.192.xxx.xxx 未訂閱
您好: 小弟有一函式AddStringToArray(),會回傳一個AnsiString的array的"位址" 如下: // Unit1.hpp private: // User declarations AnsiString NetString1,NetString1_array[3]; AnsiString* AddStringToArray(AnsiString NetString); // Unit1.cpp // ------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { NetString1_array = AddStringToArray(NetString1); Edit1->Text = NetString1_array[0]; } //--------------------------------------------------------------------------- AnsiString* AddStringToArray(AnsiString NetString) { AnsiString NetString_array[3]; NetString_array[0] = "ABC"; NetString_array[1] = "DEF"; NetString_array[2] = "GHI"; return &NetString_array; } 編譯後都會在 NetString1_array = AddStringToArray(NetString1); 顯示 "Lvalue required" 的錯誤訊息 想是搞不清楚傳址、指標之間的關係(該加*還是&),但是抓不到要領 可否請哪位幫忙看看?謝謝您了
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-01 17:20:26 IP:203.70.xxx.xxx 未訂閱
// Unit1.hpp
private:        // User declarations
        AnsiString NetString1, *NetString1_array;
        AnsiString* AddStringToArray(AnsiString NetString);
// Unit1.cpp 
// -------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        NetString1_array = AddStringToArray(NetString1);
        Edit1->Text = NetString1_array[0];
}
//---------------------------------------------------------------------------    AnsiString* AddStringToArray(AnsiString NetString)
{
        static AnsiString NetString_array[3];            NetString_array[0] = "ABC";
        NetString_array[1] = "DEF";
        NetString_array[2] = "GHI";            return NetString_array;    }
基本上我不太曉得您 Method 這樣切割的用意,不過我照著您程式的風格將它改成可以跑的,您程式中有一個常見的錯誤,你 return local varible 的 address,基本上 local varible 一但離開你 function 的範圍,它的位址就不再具有意義! 發表人 - allenchan 於 2004/12/01 17:32:22
Wuei
一般會員


發表:10
回覆:11
積分:4
註冊:2003-08-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-02 11:38:01 IP:210.192.xxx.xxx 未訂閱
Dear Allen, 您好,您的回應的確解決了我的問題,謝謝 但是,之所以寫成函式,是為了每次呼叫 AddStringToArray() 都可以回傳一組新的array回來(經過您更正回傳為array位址) 若我將函式中的 NetString_array[128] 宣告為static 當我第二次以後呼叫此函式都無法再改變 NetString_array[128] 的值 因此只有第一次使用 AddStringToArray() 是成功的,之後的呼叫都只是重複第一次的結果 簡單的說,就是每次呼叫 AddStringToArray(),都要在記憶體中規劃出一塊新的地方放 AddStringToArray() 的計算結果 抱歉我沒將問題說清楚 請問這樣該如何宣告才對呢? 謝謝!
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-02 12:21:34 IP:61.230.xxx.xxx 未訂閱
AnsiString* AddStringToArray(AnsiString NetString) { AnsiString *NetString_array = new AnsiString [3]; NetString_array[0] = "ABC"; NetString_array[1] = "DEF"; NetString_array[2] = "GHI"; return NetString_array; } 回傳的 NetString_array 在用完後要記得 delete ;
系統時間:2024-06-24 20:46:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!