|
AnsiString이 자체적 포인터 적인 성격을 띄고 있기 때문에 아래 프로그래밍 구문에서는
실질적으로 포인터 사용이 잘못 되었음에도 에러가 나지 않아 혼동이 되신것 같습니다.
또한, 기타 배열을 넘겨 받으실때 전역 변수가 아니라면 포인터로 리턴값을 받는 것 보다
포인터로 인자를 넘겨주고, 함수 내에서 작업을 직접 하는 것이 훨씬 함수라는 성격 및
작업 유용성에 좋다고 생각합니다.
AnsiString 배열을 사용하실 것이라면, StringList를 사용하시는 것도 좋습니다.
StringList->Count 식으로 원하시는 대로 몇개까지 쓰여졌나도 알 수 있습니다.
아래는 예제입니다.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStringList *slList = new TStringList;
Form1->GetCheckedTestCase(slList);
Edit1->Text = slList->Strings[1];
delete slList;
}
//---------------------------------------------------------------------------
// 함수
void __fastcall TForm1::GetCheckedTestCase(TStringList *slList)
{
int itCount, itMaxCount = 0;
slList->Clear();
for(itCount = 0; itCount < Form1->CheckListBox1->Items->Count; itCount ++) {
if(Form1->CheckListBox1->Checked[itCount]) {
slList->Add(Form1->CheckListBox1->Items->Strings[itCount]);
itMaxCount ++;
}
}
}
cuperido
라모드 님이 쓰신 글 :
: 어떤 함수에서 AnsiString으로 된 배열모두 Return 하려고 아래와 같이 Source code를 작성하였는데 배열의 첫번째 내용만 리턴되고 나머지는 모두 Black 입니다.
: 어떻게 하면 배열의 모든 값들을 return 할 수 있을까요?
: 그리고 한가지더 배열의 크기를 100으로 잡았는데 실제로 어디까지 데이터가 차있는지 알 수 있는 쉬운 방법이 있을까요?
:
:
: // main source code
: void __fastcall TForm1::Button2Click(TObject *Sender)
: {
: AnsiString temp[100];
: *temp = ScriptList.GetCheckedTestCase();
: Edit1->Text=temp[2];
:
: }
:
: // 함수
: AnsiString __fastcall TScriptList::GetCheckedTestCase()
: {
: int j=0;
: for (int i=0;i<Form1->CheckListBox1->Items->Count;i++)
: {
: if (Form1->CheckListBox1->Checked[i]==true)
: {
:
: CheckedTestCase[j]=Form1->CheckListBox1->Items->Strings[i];
: Form1->RichEdit1->Lines->Add(CheckedTestCase[j]);
: j++;
: }
: }
: return *CheckedTestCase;
: }
|