AnsiString的array如何回傳? |
尚未結案
|
Wuei
一般會員 發表:10 回覆:11 積分:4 註冊:2003-08-14 發送簡訊給我 |
您好:
小弟有一函式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 發送簡訊給我 |
// 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 發送簡訊給我 |
Dear Allen, 您好,您的回應的確解決了我的問題,謝謝
但是,之所以寫成函式,是為了每次呼叫 AddStringToArray() 都可以回傳一組新的array回來(經過您更正回傳為array位址)
若我將函式中的 NetString_array[128] 宣告為static
當我第二次以後呼叫此函式都無法再改變 NetString_array[128] 的值
因此只有第一次使用 AddStringToArray() 是成功的,之後的呼叫都只是重複第一次的結果 簡單的說,就是每次呼叫 AddStringToArray(),都要在記憶體中規劃出一塊新的地方放 AddStringToArray() 的計算結果 抱歉我沒將問題說清楚
請問這樣該如何宣告才對呢?
謝謝!
|
allenchan
資深會員 發表:10 回覆:306 積分:283 註冊:2004-01-06 發送簡訊給我 |
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 ;
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |