Q&A

  • 파스칼문법)array[0..3]of char와 array[1..4]of char의 차이?
소켓 통신에서 구조체를 주고받습니다.

그런데 구조체 멤버변수를 선언할때.

StrPcopy를 쓰는데요 이건 C형의 배열을 파스칼 형태로 보내주는 거잖아요?

실제로 사용할때



Array [0..3] of char; 이렇게 선언하고 값을

StrPCopy(구조체.배열,Edit1.Text); 로 하면 값이 들어가는데.



Array [1..4] of char;이렇게 선언하고 값을

StrPCopy(구조체.배열,Edit1.Text); 로 하면 형이 다르다고 에러가 뜨는군요



C에서는 배열에 마지막을 /n으로 넣어서 배열의 길이를 알고

pas에서는 상위 1바이트에 총 길이를 넣는것으로 알고있습니다.

그런데 알고있는것과 쓰는것에는 차이가 있더군요 위의문제처럼요

혹시 이런차이점에 대해서 아시는분 답변좀 해주십시오 ㅠㅠ

델파이 만쉐이 ㅠㅠ

그럼 즐코하세요^^

3  COMMENTS
  • Profile
    innover 2001.09.05 04:42
    C나 파스칼이나 일반적으로 배열의 크기는 저장하지 않습니다. (동적배열이 아닌이상)

    스트링과 헷갈리신 모양인데, 스트링의 경우 C는 n이 아닌
  • Profile
    aparadin 2001.09.07 19:24
    > Array [1..4] of char;의 선언시에

    > StrPCopy(@구조체.배열[1], Edit1.Text);

    > 라고 하시면 문제가 해결되리라 생각됩니



    가령 이런 레코드가 있다고할때요

    command = record

    SendMessage : Array[0..3] of Char;//1번이라고하고요

    //혹은 Array[1..4] of Char;//2번이라고할때요



    어쪄고져쪄고

    end;



    Edit1.Text는 PChar형 입니다 맞져????^^;;;;;;;;;;;;;;;;;

    일단 거기에 1121 이라는 Text를 입력하면요

    그래서

    님께서 답변해주신 2번으로 선언하고 Edit1.Text를 집어넣으려면

    형이 다르니까 첫번째 주소부터 차례로 집어넣기 위해서

    StrPCopy(@Command.SendMessage[1], Edit1.Text);한다고 하는데.



    아!헷갈려

    1번의 경우는요

    StrPCopy(Command.SendMessage, Edit1.Text); 해도 값이 무리없이 들어가거든요?

    이건 주소값을 지정하지 않아도 그냥 들어가나요?



    그렇다면 1번과 2번의 차이는 시작주소를 0번 과 1번으로 바꾼것밖에 없는데요 ㅠㅠ

    그것참 헷갈리네요.... ㅠㅠ 돌이라고 화내지 마시고 좀 갈쳐주심 감사하겠습니다.

    체계적으로 배운것이 아니라 그냥 휙휙 피료한부분만 잠깐씩보고 넘어갔더니

    ㅠㅠ 드디어 한계가 나오는군요 ㅠㅠ

    부탁드립니다.

  • Profile
    하눌이 2001.09.03 21:56
    앤날에 비슷한 문제를 접했던 기억이 있는데



    type TEmp = record

    sabun : array [0..3] of char;

    name : array [0..19] of char;

    end;



    var

    varEmp : TEmp;

    begin

    .. 어쩌구...



    end;



    이렇게 했을때

    varEmp의 값을 디버깅창에서 값을 보면 희안하게

    sabun 다음항목까지 "n" 인가 값이 있더라구요..

    그래서 항목의 값을 넘길때, 배열길이 만큼 잘라서 넣었더니 해결되었거든요



    물론 원인은 잘모르겠구요...



    이거라두 도움이 되셨으면 조켄는데...