Q&A

  • 코딩은 맞는거 같은데....실행하면 안되네여...
책에 있는 간단한 예제인데...안되거든여....근데 문제점을 못찾겠어여....

중단점걸고 디버깅해보면 변수인 ret_str에 값이 안들어가는거 같은데...왜그런지..

프로그램 내용은 메모장1에 글을 쓰면 공백을 제거한 내용이 메모2에 들어가게 되는건데.. "가 나 다 =>가나다" 이런식으로...ㅠㅠ

procedure TForm1.Button13Click(Sender: TObject);

var

i,my_cnt:integer;

my_str,ret_str:shortstring;

begin

my_str:=copy(memo1.Text,1,length(memo1.text));

my_cnt:=1;

for i:=1 to length(memo1.Text) do

begin

if my_str[i]<>#32 then

begin

ret_str[my_cnt]:=my_str[i];

inc(my_cnt);

end;

end;

memo2.Text:=copy(ret_str,1,my_cnt-1);



end;

end.

...my_str에는 값이 들어가여....

근데 ret_str에는 값이 안들어가는거 같어여...



3  COMMENTS
  • Profile
    감초 2001.04.01 07:31
    이거 작동 되는데요.. 제가 간단히 복사해서 실행결과 제대로 됩니다. 아마도 다른것때문에 에라가 났는지 모르겠는데요.

    단지 ShortString이라 긴 문장을 하려면 문제가 될것입니다.



    실행 예; Memo1 is not an empty box.

    안녕하세요? 반갑 습니다.



    실행 결과: Memo1isnotanemptybox.

    안녕하세요?반갑습니다.









    김동수 wrote:

    > 책에 있는 간단한 예제인데...안되거든여....근데 문제점을 못찾겠어여....

    > 중단점걸고 디버깅해보면 변수인 ret_str에 값이 안들어가는거 같은데...왜그런지..

    > 프로그램 내용은 메모장1에 글을 쓰면 공백을 제거한 내용이 메모2에 들어가게 되는건데.. "가 나 다 =>가나다" 이런식으로...ㅠㅠ

    > procedure TForm1.Button13Click(Sender: TObject);

    > var

    > i,my_cnt:integer;

    > my_str,ret_str:shortstring;

    > begin

    > my_str:=copy(memo1.Text,1,length(memo1.text));

    > my_cnt:=1;

    > for i:=1 to length(memo1.Text) do

    > begin

    > if my_str[i]<>#32 then

    > begin

    > ret_str[my_cnt]:=my_str[i];

    > inc(my_cnt);

    > end;

    > end;

    > memo2.Text:=copy(ret_str,1,my_cnt-1);

    >

    > end;

    > end.

    > ...my_str에는 값이 들어가여....

    > 근데 ret_str에는 값이 안들어가는거 같어여...

    >

  • Profile
    류종택 2001.04.01 02:02
    우선 아래 답변하신 분의 내용이 잘못된 것이 있는데..

    ShortString은 255자 까지 문자를 넣을 수 있는 문자의 배열입니다..

    맨 앞의 바이트는 문자열의 길이를나타냅니다.

    즉 총 256 바이트를 차지하고 있는 배열입니다.



    아래의 소스는 동작하는데 문제는 없겠으나..

    한 가지 의아한 점은 ret_strd의 크기가 선언이 되지 않았다는 점입니다..

    ShortString의 첫 번째 바이트의 숫자가 만약 '0'라면 아무리 문자를 대입해도..

    문자열의 길이는 '0', 즉 Null 문자열이 됩니다..



    따라서 소스는 아래와 같이 되어야 완전한 형태라고 볼 수 있습니다..

    var

    i,my_cnt:integer;

    my_str,ret_str:shortstring;

    begin

    my_str:=copy(memo1.Text,1,length(memo1.text));

    my_cnt:=1;

    for i:=1 to length(memo1.Text) do

    begin

    if my_str[i]<>#32 then

    begin

    ret_str[my_cnt]:=my_str[i];

    inc(my_cnt);

    end;

    end;

    ret_str[0]:= Char(my_cnt); // 문자열의 길이를 설정..

    // SetLength라는 함수를 이용하는 것이 일반 String과

    // 호환을 고려할 수 있으니 권장함

    memo2.Text:=copy(ret_str,1,my_cnt-1);

    end;





    From 류..



    김동수 wrote:

    > 책에 있는 간단한 예제인데...안되거든여....근데 문제점을 못찾겠어여....

    > 중단점걸고 디버깅해보면 변수인 ret_str에 값이 안들어가는거 같은데...왜그런지..

    > 프로그램 내용은 메모장1에 글을 쓰면 공백을 제거한 내용이 메모2에 들어가게 되는건데.. "가 나 다 =>가나다" 이런식으로...ㅠㅠ

    > procedure TForm1.Button13Click(Sender: TObject);

    > var

    > i,my_cnt:integer;

    > my_str,ret_str:shortstring;

    > begin

    > my_str:=copy(memo1.Text,1,length(memo1.text));

    > my_cnt:=1;

    > for i:=1 to length(memo1.Text) do

    > begin

    > if my_str[i]<>#32 then

    > begin

    > ret_str[my_cnt]:=my_str[i];

    > inc(my_cnt);

    > end;

    > end;

    > memo2.Text:=copy(ret_str,1,my_cnt-1);

    >

    > end;

    > end.

    > ...my_str에는 값이 들어가여....

    > 근데 ret_str에는 값이 안들어가는거 같어여...

    >

  • Profile
    나그네 2001.04.01 00:55
    ret_str을 배열로 잡아야되지 않을까요?





    김동수 wrote:

    > 책에 있는 간단한 예제인데...안되거든여....근데 문제점을 못찾겠어여....

    > 중단점걸고 디버깅해보면 변수인 ret_str에 값이 안들어가는거 같은데...왜그런지..

    > 프로그램 내용은 메모장1에 글을 쓰면 공백을 제거한 내용이 메모2에 들어가게 되는건데.. "가 나 다 =>가나다" 이런식으로...ㅠㅠ

    > procedure TForm1.Button13Click(Sender: TObject);

    > var

    > i,my_cnt:integer;

    > my_str,ret_str:shortstring;

    > begin

    > my_str:=copy(memo1.Text,1,length(memo1.text));

    > my_cnt:=1;

    > for i:=1 to length(memo1.Text) do

    > begin

    > if my_str[i]<>#32 then

    > begin

    > ret_str[my_cnt]:=my_str[i];

    > inc(my_cnt);

    > end;

    > end;

    > memo2.Text:=copy(ret_str,1,my_cnt-1);

    >

    > end;

    > end.

    > ...my_str에는 값이 들어가여....

    > 근데 ret_str에는 값이 안들어가는거 같어여...

    >