|
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 로 타입 변환을 할 수 없다고 에러가 납니다.
:
: 어떻게 변환을 해야하는지 가르쳐주세요..
:
: 감사합니다.
:
:
:
:
|