C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[61219] Re:Re:Re:Re:Re:Re:AnsiString질문이요~
아제나 [azena] 1014 읽음    2010-05-28 10:31
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 변수에다가 넣으려고 하는데요.
: : : : : : 형이 틀리다고 들어가지가 않아요.
: : : : : : 방법이 없을까요?

+ -

관련 글 리스트
61201 AnsiString질문이요~ BBM 1031 2010/05/27
61202     Re:AnsiString질문이요~ 송신영 1262 2010/05/27
61203         Re:Re:AnsiString질문이요~ BBM 1188 2010/05/27
61204             Re:Re:Re:AnsiString질문이요~ 송신영 1075 2010/05/27
61205                 Re:Re:Re:Re:AnsiString질문이요~ 장성호 1065 2010/05/27
61217                     Re:Re:Re:Re:Re:AnsiString질문이요~ ben 1156 2010/05/28
61219                         Re:Re:Re:Re:Re:Re:AnsiString질문이요~ 아제나 1014 2010/05/28
61222                             Re:Re:Re:Re:Re:Re:Re:AnsiString질문이요~ 장성호 1109 2010/05/28
61220                             Re:Re:Re:Re:Re:Re:Re:AnsiString질문이요~ 송신영 1080 2010/05/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.