Q&A

  • 스트링에 문자 채우는 법
procedure TForm1.Button1Click(Sender: TObject);

var

S : String;

i : Integer;

begin

setLength(S, j);



FillChar(S, j, '1');



for i := 0 to 9 do

begin

showmessage(S[i]);

end;

end;



이렇게 했었는데.. 에러가 나네요..

j는 가변적으로 바뀔 수 있는 전역변수이구요.

물론 FillChar을 안쓰고, for문을 돌리면

되는데요.. 그럼 시간이 오래 걸릴거 같아서요.

백만건이 될 수도 있거든요..

빠르게 할 수 있는 방법 아시는분 좀 갈쳐주세요..

1  COMMENTS
  • Profile
    innover 2001.09.05 23:36
    이렇게 하시기 바랍니다.



    SetLength(S, j);

    FillChar(S[1], j, '1');

    혹은

    FillChar(PChar(S)^, j, '1');

    혹은

    FillMemory(@S[1], j, Ord('1'));

    혹은

    FillMemory(PChar(S), j, Ord('1'));



    델파이를 익히는데 있어서 형(type)에 대해 알아두는것은 매우 중요한 일이죠.

    S는 정확히는 포인터가 아니지만 내부적으로 PChar와 비슷하게 보시면 된다고

    생각하시면 됩니다.

    FillChar의 경우 const로 들어가는데 포인터 값을 넣으면 안되겠죠?

    따라서 s[1]이나 PChar(S)^로 fill 할 처음 부분을 가리킨 것입니다.

    FillMemory의 경우 pointer로 들어가기 때문에 포인터를 써준것이고요,

    string은 PChar와 비슷하지만 포인터는 아니기 때문에 형변환을 거쳤습니다.



    정이 wrote:

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > S : String;

    > i : Integer;

    > begin

    > setLength(S, j);

    >

    > FillChar(S, j, '1');

    >

    > for i := 0 to 9 do

    > begin

    > showmessage(S[i]);

    > end;

    > end;

    >

    > 이렇게 했었는데.. 에러가 나네요..

    > j는 가변적으로 바뀔 수 있는 전역변수이구요.

    > 물론 FillChar을 안쓰고, for문을 돌리면

    > 되는데요.. 그럼 시간이 오래 걸릴거 같아서요.

    > 백만건이 될 수도 있거든요..

    > 빠르게 할 수 있는 방법 아시는분 좀 갈쳐주세요..