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
[55242] Re:AnsiString 와 char * 비교 부탁드립니다.
김태선 [cppbuilder] 1603 읽음    2008-11-24 03:41
vEditInterval->Text는 프로퍼티로서 여기서 데이타를 취하려하면
새로 배정된 메모리에 있는 사본에 대한 값을 줍니다.
그러므로

     char *Data = vEditInterval->Text.c_str();

Data에는 사본 데이타 번지가 받아 집니다.

     int length = StrLen(vEditInterval->Text.c_str());

다시 프로퍼티를 제어하므로, 이때 Data가 가르키는 이전 사본은 폐기됩니다.
그러므로 Data[x] 를 제어하려고 하면 엉뚱한 데이타가 걸리는 것입니다.
물론 새로 메모리 할당/해제가 없는 경우는 사본을 폐기해도 그 내용까지 메모리에서
지우진 않기 때문에 마치 진짜처럼 읽을 가능성도 있지만, 이는 버그 프로그램 만드는 좋은 방법일 뿐입니다.

스트링 클래스와 프로퍼티 특성상 그렇게 처리할 수 밖에 없으니
프로퍼티에서 직접 String 번지를 받는 방법은 절대 사용하면 안됩니다.
위처럼 사용하기도 전에 폐기 됩니다.


민간돼지 님이 쓰신 글 :
: 아래와 같이 실행하면 Data값이 제대로 나오는데요
: //////////////////////////////////////////////////////////////////
:     AnsiString TESTData;
:     TESTData = vEditInterval->Text;
:     char *Data = TESTData.c_str();
:
:     int length = StrLen(vEditInterval->Text.c_str());
:
:     for(int i= 0; i<length; i++)
:     {                                                                                                                    -
:         if(!('0'<=Data[i]&&Data[i]<='9'))
:         {
:             MessageDlg("숫자만 입력하세요", mtWarning, TMsgDlgButtons() << mbOK, 0);
:             return;
:         }
:     }
: //////////////////////////////////////////////////////////////////
: 아래와 같이 실행하면 Data값이 이상하게 나오는데 차이를 모르겠습니다.
: /////////////////////////////////////////////////////////////////
:
:     char *Data = vEditInterval->Text.c_str();
:
:     int length = StrLen(vEditInterval->Text.c_str());
:
:     for(int i= 0; i<length; i++)
:     {                                                                                                                    -
:         if(!('0'<=Data[i]&&Data[i]<='9'))
:         {
:             MessageDlg("숫자만 입력하세요", mtWarning, TMsgDlgButtons() << mbOK, 0);
:             return;
:         }
:     }
: /////////////////////////////////////////////////////////////////////////////////////////////////////
:     AnsiString TESTData;                                   //
:     TESTData = vEditInterval->Text;                    //                char *Data = vEditInterval->Text.c_str();
:     char *Data = TESTData.c_str();                    //
: ////////////////////////////////////////////////////////////////////////////////////////////////////
: 초보적인 질문이지만 비교  부탁드리겠습니다.  너무 궁금해서요

+ -

관련 글 리스트
55222 AnsiString 와 char * 비교 부탁드립니다. 민간돼지 1885 2008/11/21
55242     Re:AnsiString 와 char * 비교 부탁드립니다. 김태선 1603 2008/11/24
55250         Re:Re:AnsiString 와 char * 비교 부탁드립니다. 아제나 1550 2008/11/24
55253             Re:Re:Re:AnsiString 와 char * 비교 부탁드립니다. 장성호 1606 2008/11/24
55259                 Re:Re:Re:Re:AnsiString 와 char * 비교 부탁드립니다. 아제나 1819 2008/11/24
55247         Re:Re:AnsiString 와 char * 비교 부탁드립니다. 민간돼지 1261 2008/11/24
55233     Re:AnsiString 와 char * 비교 부탁드립니다. 아제나 1624 2008/11/21
55248         Re:Re:AnsiString 와 char * 비교 부탁드립니다. 민간돼지 1339 2008/11/24
55227     Re:AnsiString 와 char * 비교 부탁드립니다. 장성호 2194 2008/11/21
55228         Re:Re:답변 감사드립니다. 민간돼지 1367 2008/11/21
55223     저는 잘 되는데요. 근데 '-' 이건 뭐에요? 조대현.Clau 1435 2008/11/21
55226         Re:저는 잘 되는데요. 근데 '-' 이건 뭐에요? 민간돼지 1395 2008/11/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.