char *A;
AnsiString B;
B = ComComboBox1->Text;
A = B.c_str();
B를 추가적으로 할당하지만, 내부적으로 레퍼런스 카운트만 증가하기 때문에
메모리 복사 같은 일이 발생하지 않아 속도에서 memcpy를 이용한 메모리 복사보다 이득입니다.
추가적으로 이용하기도 편리하고 말이죠. B.length() 등...
요즘처럼 메모리 4G씩 장착하는 세상에서 변수 선언에 인색할 필요는 없죠.
ben 님이 쓰신 글 :
:
char * A;
: A = ComComboBox1->Text.c_str();
:
: 보다는..
:
:
char A[1024];
: memset(A, 0x00 , sizeof(A));
: strcpy( A , ComComboBox1->Text.c_str() );
:
: 뭐.. .이렇게 하시면 ok?
:
:
:
:
: 장성호 님이 쓰신 글 :
: :
: : 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 변수에다가 넣으려고 하는데요.
: : : : : : 형이 틀리다고 들어가지가 않아요.
: : : : : : 방법이 없을까요?