2012년 11월 10일 토요일

String 다루는 방법이 바귀였습니다. (Delphi 2009 이후)


procedure TForm1.Button1Click(Sender: TObject);
var
  ipChar: pAnsiChar;
  S1,S2,S5,S6: AnsiString;
  jpChar: pChar;
  S3, S4: String;
begin
  S1:= '1234 이정귀';
  S2:= S1; // S1 와 S2는 같은 어드레스를 가르킴
  ipChar:= pAnsiChar(S1);
  // ipChar[1]:= 'G'; 델파이 2009 버전 부터는 컴파일 에러 발생
  S1[1]:= 'G'; // S1의 어드레스가 바뀜니다.
  Edit1.Text:= S2;
  //
  S3:= '1234 이정귀';
  S4:= S3;   // S3 와 S4는 같은 어드레스를 가르킴
  jpChar:= pChar(S3);
  // jpchar[1]:= 'G'; 델파이 2009 버전 부터는 컴파일 에러 발생
  S3[1]:= 'G'; // S3의 어드레스가 바뀜니다.
  Edit2.Text:= S4;
  MessageBox(Handle, pChar(S3), pChar(S4), MB_OK); // 주1
  S4[6]:= 'G';
  Edit3.Text:= S4;
  s5:= '1234 이정귀';
  s6:= S5;
  S5[6]:= 'G';
  Edit4.Text:= S5;
end;

예전 버전에서는 jpchar[1] 과 같은 연산이 가능 했으며,
이 연산 이후에 S3, S4 의 어드레스가 같았습니다.

이젠 pChar 는 정말로 주1 과 같은 경우이외는 사용 할 필요가 없는 것 같습니다.

댓글 없음:

델파이 12.1이냐 11.3이냐?

 델파이가 12.1이 나왔습니다. 혹시 11.3버전의 커뮤니티버전이 필요하시는분이 있을 수 있을 것 같아 https://altd.embarcadero.com/.../RADStudio_11_3_esd_28... 와 이것 찾느랴 엄청고생함.