음...
SynEdit는 안써봤지만..
vcl기반 TEdit도 똑같은 결과가 나올것입니다.
String(AnsiString이나 UnicodeString ) 과 관련된것입니다.
Edit의 Text는 property로 되어있습니다.
Get할때 Edit 내부 Method가 동작하지요
Method에서는 String 을 하나 만들어 text를 복사한후에 return합니다.
매번 Edit의 Text에 접근할때 마다 새로운 String변수를 생성해서 return 합니다.
그래서 매번 주소가 달라지는 것입니다.
님의 코드에서는 3번 Text에 접근했으니 3번 String이 생성되었겠네요..
소멸은 자동으로 됩니다. 더이상 String을 사용하지 않게되면..
String클래스는 Reference-Count가 0 이 되면 자동 소멸됩니다
다음과 같이 하면 3가지 모두 같은 주소가 나올것입니다.
String str = syned1->Text;
char *pStr1 = str.c_str();
char *pStr2 = &str.c_str()[0];
char *pStr3 = str.data();
하지만 다음 pStr4는 주소가 다를것입니다.
AnsiString temp = pStr1;
char *pStr4 = temp.c_str( ) ;
왜냐하면 새로운 String이 생성되었기 때문이죠
님께서는
*
Control의 Property의 동작에 대한 이해와
*
String class에 대한 이해가 좀더 필요 한것 같습니다.
그럼..
Neit 님이 쓰신 글 :
: SynEdit 에 뿌려지고 있는 문자열을 직접 접근하려고
:
: char *str1 = &(syndt1->Text.c_str()[startPos]);
: ------------------------------------------
: AnsiString temp = &(syndt1->Text.c_str()[startPos]);
: char *str2 = temp.c_str();
: ------------------------------------------
: char *str3 = &(((char *)syndt1->Text.data())[startPos]);
:
:
: 위 3가제 예에서 str1, str2, str3 가 서로 다른 포인터를 받아오더라구요.
:
: &str1: :0012F5EC
: &str2: :0012F5E4
: &str3: :0012F5E8
:
: 요런식으로요.
:
: 이게 무슨 차이 일까요 ? c_str(), data() 함수가 정확하게 뭘 리턴하는건지 몰라서 혹시 아는분계신지 질문드립니다.