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
[3331] Re : memmove함수를 이용하세요.
[] 3767 읽음    2000-04-15 00:00
먼저
#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;
:
: 이 글을 보시는 분들의 많은 의견 바랍니다.
:     항상 좋은 시간이 함께 하길....

+ -

관련 글 리스트
3327 [질문] 배열문에서 원하는 부분만 저장시키는 방법은 없나요? 시간한줌 3583 2000/04/15
3331     Re : memmove함수를 이용하세요. 3767 2000/04/15
3328     Re:[질문] 배열문에서 원하는 부분만 저장시키는 방법은 없나요? 최장민 3661 2000/04/15
3332         Re:Re:[질문] 배열문에서 원하는 부분만 저장시키는 방법은 없나요? 3550 2000/04/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.