char * A;
A = ComComboBox1->Text.c_str();
위와같이 하면 char*를 받아올수 있습니다.
하지만..
char *A를 쓰려고 하면.. 이미
무효화된 메모리의 포인터입니다.
전에 도 말씀드렸듯이 TControl의 모든 Text나 Caption은 Property로써
내부 맴버 String변수를 return해주는것이 아니라..
Text를 가져와서 임시메모리를 할당해서 return해주고
String으로 받는놈이 없으면 곧바로 free해버립니다.
다음과 같이해야합니다.
char * A;
AnsiString s=ComComboBox1->Text.c_str();
A = s.c_str();
팁&트릭 게시판에 퀴즈를 통해
위와같은 코드의 문제점을 지적한적 있습니다.
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=961
그럼..
송신영 님이 쓰신 글 :
: AnsiString 에는 .c_str()이라는 메소드를 지원해 줍니다. 이 함수는 char * 형을 리턴합니다.
:
:
: char * A;
: A = ComComboBox1->Text.c_str();
:
:
:
: BBM 님이 쓰신 글 :
: : 답변 감사합니다~
: : 하나만 더 여쭤볼께요.
: : 제가
: : char* A
: : A= ComComboBox1->Text;
: : 이런식의 선언을 했는데요.
: : 이런식은 자동 형 변환이 안되나요?
: : 강제형변환을 해도 에러가 해결이 안되는데요...
: :
: :
: :
: : 송신영 님이 쓰신 글 :
: : : 아마도 C언어만 접해본것 같습니다.
: : : 우선 C++ 의 Class 개념을 공부하셔야할것 같습니다.
: : : 일단 질문하신 내용의 답변은 아래와 같습니다.
: : : AnsiString 으로 선언한 변수에 그냥 int 값이나 char *값을 넣어도 자동으로 알아서
: : : 변환해서 저장됩니다.
: : :
: : :
: : : void __fastcall TForm1::Button1Click(TObject *Sender)
: : : {
: : : int * pInt;
: : : int nValue = 100;
: : : char * sTemp1 = "SONG";
: : : char sTemp2[6] = {'K', 'O', 'R', 'E', 'A', '\0'};
: : :
: : : AnsiString sBuffer1, sBuffer2, sBuffer3;
: : :
: : : pInt = &nValue;
: : :
: : : sBuffer1 = *pInt; // int * 가 포인터하는 정수 값을 저장
: : : sBuffer2 = sTemp1; // char * 스트링 저장
: : : sBuffer3 = sTemp2; // char array 스트링 저장
: : :
: : : Memo1->Lines->Add(sBuffer1); // 출력 테스트
: : : Memo1->Lines->Add(sBuffer2); // 출력 테스트
: : : Memo1->Lines->Add(sBuffer3); // 출력 테스트
: : :
: : : }
: : :
: : :
: : : BBM 님이 쓰신 글 :
: : : : 도스 프로그램을 윈도우 프로그램으로 바꾸고 있는데 윈도우 프로그램을 많이 접해보지 않아서 어려움이 많아요.
: : : : 일단 문제가요.
: : : : C builder에는 AnsiString이라는 연산자(?)가 있더라고요.
: : : : 도스 프로그램에는 Char*나 int*형으로 이루워져 있는거를 AnsiString 변수에다가 넣으려고 하는데요.
: : : : 형이 틀리다고 들어가지가 않아요.
: : : : 방법이 없을까요?