Q&A

  • 구조체에 대해서.... 아시는분은 꼭 답변좀... [수정판][답변은 감사]
밑에가 코딩이거든여... 그런데 한군데에서 에러가 나여... 왜그럴까엽....



참고로.. PChar는 쓸수가 없다고 합니다....



이유는 묻지마세여~~~





코딩에다가 에러나는부분을 적아 놨습니다.







type

pstAuthUser = ^stAuthUser;



stAuthUser = Record

user : array[0..19] of Char;

Addr : Address;

password : array[0..127] of Char;

end;



Address = Record

ttype : Char; // 1=IP Address, 2=Host Name, 3=E-Mail, 4=Group Name

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

end;







implementation



procedure TFormSecureLog.bbConfirmClick(Sender: TObject);

var cstAuthUser : pstAuthUser;

begin

StrPCopy(cstAuthUser^.user, edUserID.Text);



StrPCopy(cstAuthUser^.Addr.ttype, '1'); ==> 이부분이 에러구여



밑에 에러메시지가 적혀 있습니다.



StrPCopy(cstAuthUser^.Addr.name, '211.43.170.91');

StrPCopy(cstAuthUser^.password, edPasswd.Text);

end;





******errer message *************

[Error] SecureLog.pas(125): Incompatible types: 'Char' and 'PChar'



3  COMMENTS
  • Profile
    타락천사 2000.10.07 01:18
    안녕하세여..타락임다..^^



    흠.. 코드를 봤는데..여...ㅠㅠ



    쩌비.. 포인터를 함부로 쓰면 안되여..ㅠㅠ



    아님, 어플의 메모리 구조와 메모리 함수를 완전히 알든가여..ㅠㅠ



    C 코드를 델파이로 포팅하시는 건가여?



    결론부터 말하면, C 코드의 포인터두 델파이 포인터루 포팅이 됩니다..



    StrPCopy(cstAuthUser^.Addr.ttype, '1'); ==> 이부분이 에러구여



    이게 에러가 나는건 당연합니다.. --



    StrPCopy 함수는 스트링을 카피합니다..



    따라서 널종료 문자열을 첫번째 파라미터로 받은 포인터로 카피하져..



    '1' 은 실제 1 과 nil 2 바이틉니다..



    근데 cstAuthUser^.Addr.ttype 는 Char 1 바이틉니다..



    델파이에선 컴파일러가 포인터 연산시 메모리 비교를 해줍니다..



    따라서 1바이트의 메모리에 2바이트를 카피하려고 시도하니까, 에러를 발생시키져..



    해결방법은 CopyMemory() 함수로 1바이트를 카피하거나..



    cstAuthUser^.Addr.ttype 를 2바이트 이상으로 잡으면 되겠져?



    즐푸하세여..^^



    타락천사...



  • Profile
    2000.10.07 01:15


    StrPCopy(cstAuthUser^.Addr.ttype, '1'); ==> 이부분이 에러구여



    ==> cstAuthUser^.Addr.ttype := '1';



    왕초보 wrote:

    > 밑에가 코딩이거든여... 그런데 한군데에서 에러가 나여... 왜그럴까엽....

    >

    > 참고로.. PChar는 쓸수가 없다고 합니다....

    >

    > 이유는 묻지마세여~~~

    >

    >

    > 코딩에다가 에러나는부분을 적아 놨습니다.

    >

    >

    >

    > type

    > pstAuthUser = ^stAuthUser;

    >

    > stAuthUser = Record

    > user : array[0..19] of Char;

    > Addr : Address;

    > password : array[0..127] of Char;

    > end;

    >

    > Address = Record

    > ttype : Char; // 1=IP Address, 2=Host Name, 3=E-Mail, 4=Group Name

    > name : array[0..19] of Char;

    > end;

    >

    >

    >

    > implementation

    >

    > procedure TFormSecureLog.bbConfirmClick(Sender: TObject);

    > var cstAuthUser : pstAuthUser;

    > begin

    > StrPCopy(cstAuthUser^.user, edUserID.Text);

    >

    > StrPCopy(cstAuthUser^.Addr.ttype, '1'); ==> 이부분이 에러구여

    >

    > 밑에 에러메시지가 적혀 있습니다.

    >

    > StrPCopy(cstAuthUser^.Addr.name, '211.43.170.91');

    > StrPCopy(cstAuthUser^.password, edPasswd.Text);

    > end;

    >

    >

    > ******errer message *************

    > [Error] SecureLog.pas(125): Incompatible types: 'Char' and 'PChar'

    >

  • Profile
    나그네 2000.10.07 00:47
    PChar를 쓸수 없다고 한다면 요건 어떨런지

    var

    A: array[0..1] of Char;

    S: String;

    begin

    S := '1';

    StrPCopy(A, S);

    ttype : Char; // 1=IP Address, 2=Host Name, 3=E-Mail, 4=Group Name

    어차피 tType은 1자리 아닙니까





    왕초보 wrote:

    > 밑에가 코딩이거든여... 그런데 한군데에서 에러가 나여... 왜그럴까엽....

    >

    > 참고로.. PChar는 쓸수가 없다고 합니다....

    >

    > 이유는 묻지마세여~~~

    >

    >

    > 코딩에다가 에러나는부분을 적아 놨습니다.

    >

    >

    >

    > type

    > pstAuthUser = ^stAuthUser;

    >

    > stAuthUser = Record

    > user : array[0..19] of Char;

    > Addr : Address;

    > password : array[0..127] of Char;

    > end;

    >

    > Address = Record

    > ttype : Char; // 1=IP Address, 2=Host Name, 3=E-Mail, 4=Group Name

    > name : array[0..19] of Char;

    > end;

    >

    >

    >

    > implementation

    >

    > procedure TFormSecureLog.bbConfirmClick(Sender: TObject);

    > var cstAuthUser : pstAuthUser;

    > begin

    > StrPCopy(cstAuthUser^.user, edUserID.Text);

    >

    > StrPCopy(cstAuthUser^.Addr.ttype, '1'); ==> 이부분이 에러구여

    >

    > 밑에 에러메시지가 적혀 있습니다.

    >

    > StrPCopy(cstAuthUser^.Addr.name, '211.43.170.91');

    > StrPCopy(cstAuthUser^.password, edPasswd.Text);

    > end;

    >

    >

    > ******errer message *************

    > [Error] SecureLog.pas(125): Incompatible types: 'Char' and 'PChar'

    >