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
[16572] 이것도 참고하셔요
Julien [julien] 1097 읽음    2002-03-20 20:12
C에서 배열은 포인터와 동일합니다.

char a[3] = "11";
char *b = "22";
이렇게 두 가지 모두 사용할 수 있다는 뜻입니다.
그런데 여기에는 중요한 차이가 있습니다.
a는 현재 "11"이라는 리터럴이 들어있는 주소값만을 가질수 있습니다.
그에 비해 b는 다른 주소도 가질 수 있지요.
다시 말해서 배열로 선언을 하게 되면 그 변수의 주소값은 바꿀 수 없다는 뜻입니다.

unsigned char *test = malloc( 100 );
test = Edit1->Text.c_str();

이렇게 사용하면 메모리 누수는 발생하여도 구문상 오류는 없습니다.
참고로 메모리 누수를 막으려면 먼저 free( test );를 수행하여 메모리를 해제하여야 합니다.

그러나

unsigned char test[100];
test = Edit1->Text.c_str();

이렇게 사용하면 test라는 변수가 현재 가지고 있는 포인터값를 버리고
Edit1->Text라는 스트링이 가지고 있는 포인터값을 가지라는 의미가 됩니다.
앞에서 얘기했듯이 배열의 주소는 바꿀 수 없으므로 위의 문장은 오류가 됩니다.

이 경우에는

strcpy( test, Edit1->Text.c_str() );

을 사용하여 문장을 test로 복사를 해주어야 합니다.

마지막으로

test[100] = Edit1->Text;

님의 질문같은 경우는 아래 글 처럼 절대로 이루어질 수 없는 경우입니다.
(버퍼오버플로우같은 악의적인 방법을 쓰면 메모리범위 바깥에도 데이터를 기록할 수 있긴 합니다만...^^)

김경완 님이 쓰신 글 :
: 안녕하세요....고수님들....
:
: 초보자 입니다..
:
: unsigned char test[100];
:
: 위의 test에 에디트박스에서 입력한 문자열을 넣으려고 합니다.
:
: test[100] = Edit1->Text;
:
: 타입 변환을 해야하는데 Edit1->Text.c_str() 이렇게 했더니..
: char * 에서 unsigned char 로 타입 변환을 할 수 없다고 에러가 납니다.
:
: 어떻게 변환을 해야하는지 가르쳐주세요..

: 감사합니다.
:
:
:
:

+ -

관련 글 리스트
16544 [질문있습니다] 또,,,기본적인 겁니다.^^* 김경완 1141 2002/03/20
16572     이것도 참고하셔요 Julien 1097 2002/03/20
16553     참고하세요.. 지나가는 사람 1118 2002/03/20
16556         Re:고맙습니다...많은 도움이 되었습니다...(냉무^^*) 김경완 1109 2002/03/20
16545     Re:[질문있습니다] 또,,,기본적인 겁니다.^^* 산적 1051 2002/03/20
16546         Re:Re:[질문있습니다] 또,,,기본적인 겁니다.^^* 김경완 1146 2002/03/20
16548             Re:Re:Re:[질문있습니다] 또,,,기본적인 겁니다.^^* 산적 1039 2002/03/20
16549                 Re:Re:Re:Re:[질문있습니다] 또,,,기본적인 겁니다.^^* 산적 1063 2002/03/20
16552                     Re:Re:Re:Re:Re:고맙습니다.(냉무^^*) 왕처버..... 948 2002/03/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.