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문을 돌리면
되는데요.. 그럼 시간이 오래 걸릴거 같아서요.
백만건이 될 수도 있거든요..
빠르게 할 수 있는 방법 아시는분 좀 갈쳐주세요..
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문을 돌리면
> 되는데요.. 그럼 시간이 오래 걸릴거 같아서요.
> 백만건이 될 수도 있거든요..
> 빠르게 할 수 있는 방법 아시는분 좀 갈쳐주세요..