다른건 아니고요
string 형을 array에 move 시킬때
var
data : String;
data_re : array[0..4] of char;
move(PChar(data)^, data_re, length( data_re));
위처럼 하더군요 그랫 질문인데요
PChar(data)^ 부분에서 pchar( ) 이런식으로 하면 그안의 값이 포인터가 되어
^ 로 주소의 값이 data_re 에 들어가는건가요?
PChar(data)^ 이부분이 어떻게 data_re 의 배열에 move 되는지 궁금합니다
Move 함수는 포인터 또는 배열 이동 함수입니다.
원본을 대상 배열이나 포인터로 이동시키지요.
그런데, 델파이의 String은 배열이면서도, 약간 다릅니다. 왜냐하면, 델파이의 AnsiString에는 문자열의 길이와 참조 계수라는 것을 포함하면서, 실제 문자열은 별도의 힙 메모리에 생성이 되기 때문입니다. 즉, 아래의 data 변수 자체가 가리키는 포인터는 문자열의 시작되는 포인터가 아니라, AnsiString 정보를 젖아하고 있는 위치를 가리키고 있기 때문에, 바로 Move를 사용하면 엉뚱한 값(포인터 값)이 복사됩니다.
그래서, 델파이의 문자열을 Move와 비슷한 함수들에게 문자열이 시작되는 포인터로 넘겨 줄 경우에 data[1]과 같은 형식으로 적어주거나, 아래의 예제처럼 문자열이 시작되는 포인터를 명시적으로 가리키도록 합니다.
그럼, 즐프~