저기 밑에 있는 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을 써서 그런것 같아요..
어떻게 해야 할지 모르겠습니다.
도와 주세요..
엉엉~~
질문은 중복해서 쓰시지 마시기 바랍니다.
예전에 물어봐서 제가 설명드렸던 코드같군요.
우선 아래 코드는 좀 이상하군요. 위에서는 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을 써서 그런것 같아요..
> 어떻게 해야 할지 모르겠습니다.
> 도와 주세요..
> 엉엉~~
>