안녕하세요. 천리안 프로그래머포럼 C++Builder 담당 임펠리테리입니다.
안시스트링은 내부적으로 문자열포인터를 갖고 있는 클래스이며, 내부적으로 가지고
있는 포인터의 값을 리턴하는 멤버함수가 c_str()입니다. 하지만, 이 함수가 리턴하는
포인터값은 내부적으로 사용하는 값이므로 여기에다 다른 값을 쓰면 안됩니다.
read-only라고 생각하는 것이 좋습니다. 그러므로 write 목적으로 사용하려면
strcpy()를 써서 새로운 다른 버퍼에 복사해서 사용해야 합니다.
하지만 api 함수의 인자로 넘길때, read용도로만 쓰인다면 그대로 c_str() 함수에서
넘어온 값을 그대로 쓸수 있습니다.
질문하신 경우에도, 리턴받은 안시스트링의 포인터를 다시 write용도로 쓰려고 한다면
새로운 버퍼를 만들어서 사용해야 하며, 그냥 읽기정도로만 쓰려면 그대로 쓰면
됩니다.
읽기로만 쓸 경우:
char *TT;
TT = ComboBox1->Items->Strings[0].c_str();
write 용도로도 쓸 경우:
char *TT;
TT = new char[ComboBox1->Items->Strings[0].Length()+1];
strcpy(TT, ComboBox1->Items->Strings[0].c_str());
그럼 참고하시길...
임펠리테리 박지훈이었습니다.
( http://www.borlandforum.com, cbuilder@shinhae.com)
|