Q&A

  • GetMem으로 얻은 버퍼에 255자 이상의 string을 넣으면 안되나요?
저기 밑에 있는 GetMem관련 질문을 했었는데요..

답변이 없어서요..

제가 여러가지로 생각해 본 결과

아마도 string이 255자가 넘어서 그런것이 안닌가 싶네요..?



참고로 저는 일반적인 String형태로 맨앞에다가

그 string의 size를 넣어서 관리를 합니다.



Buff := S;

nSize := length(Buff); // nSize = 385;<<===이부분이 size인데요.. 255보다 큽니다.

GetMem(Mem, nSize + sizeof(LongInt));

P := Mem; //여기서 Mem = '?' <<===========여기가 왜 그러지용 이담부턴 데이터가

// 완전히 죽어 버리지용 오늘 하루죙일

// 봐도 모르겠네요..

Move(nSize, P^, sizeof(LongInt)); // 여기에서 맨앞에 size를 넣지요..

Inc(P, sizeof(LongInt)); // 그다음부터 데이터를 넣도록 증가시키지요..

Move(Buff[1], P^, nSize); // 이제 데이터 넣지요..

아무포인터변수 := mem .





그런데 255보다 큰 385크기의 string을 써서 그런것 같아요..

어떻게 해야 할지 모르겠습니다.

도와 주세요..

엉엉~~



1  COMMENTS
  • Profile
    최용일 2000.08.31 09:54
    안녕하세요. 델파이세상(http://www.freechal.com/delphiworld)의 최용일입니다.



    질문은 중복해서 쓰시지 마시기 바랍니다.



    예전에 물어봐서 제가 설명드렸던 코드같군요.



    우선 아래 코드는 좀 이상하군요. 위에서는 Integer(4byte)로 선언을 했는데 아래 크기



    정보가 들어가는 코드는 LongInt(8byte)이네요... SizeOf(Integer)가 맞는거 같군요...



    > 3 GetMem(Mem, nSize + sizeof(LongInt));

    > 5 Move(nSize, P^, sizeof(LongInt));



    0 ~ 7번까지는 이상한 값(데이터의크기)이 들어간다는데 그건 맞게 들어간 것입니다.



    이상한 값이라고 하셨는데... 그 크기가 들어가니까 문자열형태로 보시면 이상하게



    보이실 수도 있습니다. 아스키코드 1같은 것은 문자로 정의되어 있지 않습니다. 128이상



    의 값은 뒤의 값과 합쳐져서 유니코드로 보일거구요...



    이상한 값이라는 (#129, #1, #0,#0) 는 Integer로 바꾸면 385입니다. 첨에 넣어주었던



    nSize값이죠. 넣어주셨으니까 당연히 있는거죠...



    PChar이나 string은 길이 제한이 없습니다.



    ^^ 항상 즐코하세요.



    델피언 wrote:

    > 저기 밑에 있는 GetMem관련 질문을 했었는데요..

    > 답변이 없어서요..

    > 제가 여러가지로 생각해 본 결과

    > 아마도 string이 255자가 넘어서 그런것이 안닌가 싶네요..?

    >

    > 참고로 저는 일반적인 String형태로 맨앞에다가

    > 그 string의 size를 넣어서 관리를 합니다.

    >

    > Buff := S;

    > nSize := length(Buff); // nSize = 385;<<===이부분이 size인데요.. 255보다 큽니다.

    > GetMem(Mem, nSize + sizeof(LongInt));

    > P := Mem; //여기서 Mem = '?' <<===========여기가 왜 그러지용 이담부턴 데이터가

    > // 완전히 죽어 버리지용 오늘 하루죙일

    > // 봐도 모르겠네요..

    > Move(nSize, P^, sizeof(LongInt)); // 여기에서 맨앞에 size를 넣지요..

    > Inc(P, sizeof(LongInt)); // 그다음부터 데이터를 넣도록 증가시키지요..

    > Move(Buff[1], P^, nSize); // 이제 데이터 넣지요..

    > 아무포인터변수 := mem .

    >

    >

    > 그런데 255보다 큰 385크기의 string을 써서 그런것 같아요..

    > 어떻게 해야 할지 모르겠습니다.

    > 도와 주세요..

    > 엉엉~~

    >