|
먼저
#include <mem.h> 해주시고요.
그리고 아래 소스는 위험한 요소를 포함하고 있습니다.
포인터는 선언만 한 다음 바로 사용하면 메모리 충돌의 문제가 발생하죠.
char *name; 말입니다.
메모리를 할당 하신 후에 사용하셔야 하고요..
Buff의 중간 문자를 name에 넣으려면..
memmove(name, Buff + 1 , 4 );
이런식으로하면 Buff의 b부터 e까지가 name 포인터가 가리키는 곳에 복사 됩니다.
그리고 한가지
Label1->Caption = name; 이런식으로 AnsiString인 Caption에 바로 할당한다면
제대로 보일리가 없죠.
name은 문자열 포인터이므로 끝에 반드시 NULL문자가 들어가야 합니다.
따라서 그대로 name의 문자열 길이가 4바이트라면
memmove를 한 다음에 name[4]=(char)0;를 넣어주여야 Caption에 제대로 할당이 됩니다.
참고로 보통 씨++빌더에서는 문자열을 처리할때 안시스트링을 많이 이용합니다.
안시스트링의 SubString이란 메소드를 이용하면 되실테고요.. ^^
char *Buff = "abcdefg";
char *name;
AnsiString a = Buff;
AnsiString b;
b = a.SubString(1, 4);
name = b.c_str();
이렇게 하시면 됩니다.
글 올리신 분의 소스를 보니 씨 빌더 보다는
먼저 씨 나 씨++ 을 마스터 하셨으면 합니다. 기본이 먼저 겠지요. ^^;
시간한줌 님이 쓰신 글 :
: 안녕하세요. 지난번 답변에 정말 큰 도움이 되었습니다. 정말 감사감사.
: 근데 저에게 또 문제가 생겼답니다.
:
: char Buff[7]={'a','b','c','d','e','f','g'};
:
: 이 Buff값중 일부를 (예를 들어 'b'부터 'e'까지) 한 포인터 변수에 저장한다면 어떻게 해야 할까요. 제 나름대로 strcat()라는 함수를 써 봤는데 엉뚱한 결과값이 나오더군요.
:
: int i;
: char *tmp;
: char *name;
: name = "NM_";
:
: for(i=1;i<=4;i++) {
: tmp = &Buff[i];
: strcat(name, *tmp);
: }
: label1->caption = name;
:
: 이 글을 보시는 분들의 많은 의견 바랍니다.
: 항상 좋은 시간이 함께 하길....
|