Q&A

  • Move문에서...-최용일님외 고수님들께


이어지는 질문인지 모르겠습니다만....



스트링을 배열로 옮길때



var

s : string;

B : array[0..3] of Byte;

begin



Move(s[1],B[0],sizeof(s));<<- 당연히 sizeof(s)는 4입니다.



...질문드리고 싶은것은 Move(s[1],B[0],sizeof(s))와 Move(s,B,sizeof(s))이



뭐가 다른건가 하는겁니다. 되긴 되는건가??? -_-;;; 암튼 뭔가 이상하군요^^.



아시는분 설명좀 -_-;;;





3  COMMENTS
  • Profile
    구창민 2000.07.27 03:05
    델초보. wrote:

    >

    > 이어지는 질문인지 모르겠습니다만....

    >

    > 스트링을 배열로 옮길때

    >

    > var

    > s : string;

    > B : array[0..3] of Byte;

    > begin

    >

    > Move(s[1],B[0],sizeof(s));<<- 당연히 sizeof(s)는 4입니다.

    >

    > ...질문드리고 싶은것은 Move(s[1],B[0],sizeof(s))와 Move(s,B,sizeof(s))이

    >

    > 뭐가 다른건가 하는겁니다. 되긴 되는건가??? -_-;;; 암튼 뭔가 이상하군요^^.

    >

    > 아시는분 설명좀 -_-;;;

    >

    >





    ^^ 고수는 아니구요,



    s[1] 은 주소를 가르키는게 아닙니다.

    배열내의 값을 가르키는 것이지요.



    그러므로, Move(s,B,sizeof(s)) 이게 맞습니다.



    즐거운 프로그래밍 하세요~

  • Profile
    델초보. 2000.07.27 03:22
    구창민 wrote:

    > 델초보. wrote:

    > >

    > > 이어지는 질문인지 모르겠습니다만....

    > >

    > > 스트링을 배열로 옮길때

    > >

    > > var

    > > s : string;

    > > B : array[0..3] of Byte;

    > > begin

    > >

    > > Move(s[1],B[0],sizeof(s));<<- 당연히 sizeof(s)는 4입니다.

    > >

    > > ...질문드리고 싶은것은 Move(s[1],B[0],sizeof(s))와 Move(s,B,sizeof(s))이

    > >

    > > 뭐가 다른건가 하는겁니다. 되긴 되는건가??? -_-;;; 암튼 뭔가 이상하군요^^.

    > >

    > > 아시는분 설명좀 -_-;;;

    > >

    > >

    >

    >

    > ^^ 고수는 아니구요,

    >

    > s[1] 은 주소를 가르키는게 아닙니다.

    > 배열내의 값을 가르키는 것이지요.

    >

    > 그러므로, Move(s,B,sizeof(s)) 이게 맞습니다.

    >

    > 즐거운 프로그래밍 하세요~



    저도 그게 맞으려니 했는데 그러면 이상하게 나오던걸요....



    예로...



    s := 'abcd';

    showmessage(format('%.2x',[byte(s[1])])+format('%.2x',[byte(s[2])])+

    format('%.2x',[byte(s[3])])+format('%.2x',[byte(s[4])]));

    //-------------------------------------------

    Move(s,B,sizeof(s));

    //-------------------------------------------



    showmessage(format('%.2x',[B[0]])+format('%.2x',[B[1]])+

    format('%.2x',[B[2]])+format('%.2x',[B[3]]));



    하면 첨은 '61626364'로 나오는데 두번째는 '7C1D4400'이라는게 나오거든요???



    근데...



    //-------------------------------------------

    Move(s[1],B[0],sizeof(s)); 로 move하면 같이 '61626364'로 나옵니다.

    //-------------------------------------------



    제가 format문을 잘못쓴건가요? 아님 밑에것이 맞는가요??? 설명좀 부탁....







  • Profile
    구창민 2000.07.27 09:09
    델초보. wrote:

    > 구창민 wrote:

    > > 델초보. wrote:

    > > >

    > > > 이어지는 질문인지 모르겠습니다만....

    > > >

    > > > 스트링을 배열로 옮길때

    > > >

    > > > var

    > > > s : string;

    > > > B : array[0..3] of Byte;

    > > > begin

    > > >

    > > > Move(s[1],B[0],sizeof(s));<<- 당연히 sizeof(s)는 4입니다.

    > > >

    > > > ...질문드리고 싶은것은 Move(s[1],B[0],sizeof(s))와 Move(s,B,sizeof(s))이

    > > >

    > > > 뭐가 다른건가 하는겁니다. 되긴 되는건가??? -_-;;; 암튼 뭔가 이상하군요^^.

    > > >

    > > > 아시는분 설명좀 -_-;;;

    > > >

    > > >

    > >

    > >

    > > ^^ 고수는 아니구요,

    > >

    > > s[1] 은 주소를 가르키는게 아닙니다.

    > > 배열내의 값을 가르키는 것이지요.

    > >

    > > 그러므로, Move(s,B,sizeof(s)) 이게 맞습니다.

    > >

    > > 즐거운 프로그래밍 하세요~

    >

    > 저도 그게 맞으려니 했는데 그러면 이상하게 나오던걸요....

    >

    > 예로...

    >

    > s := 'abcd';

    > showmessage(format('%.2x',[byte(s[1])])+format('%.2x',[byte(s[2])])+

    > format('%.2x',[byte(s[3])])+format('%.2x',[byte(s[4])]));

    > //-------------------------------------------

    > Move(s,B,sizeof(s));

    > //-------------------------------------------

    >

    > showmessage(format('%.2x',[B[0]])+format('%.2x',[B[1]])+

    > format('%.2x',[B[2]])+format('%.2x',[B[3]]));

    >

    > 하면 첨은 '61626364'로 나오는데 두번째는 '7C1D4400'이라는게 나오거든요???

    >

    > 근데...

    >

    > //-------------------------------------------

    > Move(s[1],B[0],sizeof(s)); 로 move하면 같이 '61626364'로 나옵니다.

    > //-------------------------------------------

    >

    > 제가 format문을 잘못쓴건가요? 아님 밑에것이 맞는가요??? 설명좀 부탁....

    >

    >

    >



    말씀하신 걸 자세히 정독해보니 s 가 String형이군요..^^;



    파스칼의 String형은 배열의 처음, 즉 B[0]에는 그 스트링의

    길이가 들어있습니다.



    그래서 이상한 결과가 나온것입니다.



    해서, Move()를 사용하시려면 Move(s[1],B, sizeof(s)); 이렇게

    하는게 맞겠군요.



    그런데 의아한 점은 왜 Move를 사용하시죠?



    스트링을 배열로 복사하시려고 하는게 목적인가요?



    만약 그렇다면 StrCopy(B, PChar(s)); 이렇게 하시면 됩니다.



    같은 결과를 나타낼겁니다.



    그럼~ 즐거운 프로그래밍 하시길~