Q&A

  • 델파이에서 포인터는??
procedure TForm1.Button1Click(Sender: TObject);

var

ptr : PChar;

iptr : PChar;

dwSize : integer;

str : string;

i, types : Integer;

begin

dwsize := GetLogicalDriveStrings(0, Nil);

//위 문장을 실행하면 dwsize에 전체 logical drive를 나열한 스트링의

//총 길이가 나옵니다.



GetMem(ptr, dwsize);

//PChar 변수인 ptr에 메모리를 할당합니다.

GetLogicalDriveStrings(dwsize, ptr);



//할당된 메모리에 logical drive의 스트링을 가져옵니다.

//정확한 건 아니지만 제 생각으로는 넘어오는 스트링의 형식은 다음과 같습니다.

// 'a:c:d:w:'

//드라이명 뒤에 붙는 는 NULL character..



iptr := ptr;



while (StrLen(iptr) <> 0) do

begin

Listbox1.Items.Add(iptr);

iptr := iptr + strlen(iptr) + 1;

end;

//위의 루프가 널 문자로 분리된 각 logical drive의 이름을 추출합니다.



for i := 0 to listbox1.Items.Count - 1 do

begin

types := GetDriveType(PChar(listbox1.Items[i]));



str := listBox1.items[i] + ' ' + IntToStr(types);

listbox2.Items.add(str);

end;

//각각의 drive 이름을 주고 type을 알아냅니다.



FreeMem(ptr, dwsize);

//메모리를 해제

end;



위의 소스에서 ptr, iptr 이 pchar인데 pchar의 개념과

소스에서의 ptr, iptr은 번지인지 아니면 번지값인지 잘 모르겠습니다.

출력되는 값은 문자열인데 iptr := iptr + strlen(iptr) + 1에서는

연산을 합니다.

그리고 ^P와 p^의 차이점도 궁금하네요.



3  COMMENTS
  • Profile
    안재현 1999.11.20 02:51
    장일형 wrote:

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > ptr : PChar;

    > iptr : PChar;

    > dwSize : integer;

    > str : string;

    > i, types : Integer;

    > begin

    > dwsize := GetLogicalDriveStrings(0, Nil);

    > //위 문장을 실행하면 dwsize에 전체 logical drive를 나열한 스트링의

    > //총 길이가 나옵니다.

    >

    > GetMem(ptr, dwsize);

    > //PChar 변수인 ptr에 메모리를 할당합니다.

    > GetLogicalDriveStrings(dwsize, ptr);

    >

    > //할당된 메모리에 logical drive의 스트링을 가져옵니다.

    > //정확한 건 아니지만 제 생각으로는 넘어오는 스트링의 형식은 다음과 같습니다.

    > // 'a:c:d:w:'

    > //드라이명 뒤에 붙는
  • Profile
    장일형 1999.11.20 03:18
    > PChar는 C에서 Null String 문자열이라고 생각하시면 됩니다.

    > PChar로 선언된 변수의 길이는 제일 첫번째 NULL 문자 (
  • Profile
    안재현 1999.11.20 04:41
    장일형 wrote:

    > > PChar는 C에서 Null String 문자열이라고 생각하시면 됩니다.

    > > PChar로 선언된 변수의 길이는 제일 첫번째 NULL 문자 (