|
이영수 님이 쓰신 글 :
: 김명구 님이 쓰신 글 :
: : 현재 C++빌더 5로 프로그램 작성중인데...
: :
: : "Love#Hope#Human#...."과같은 문자열을 전송받았을때
: : 이 문자열을 읽어들여 앞에서 부터 "#" 또는 " "(blank)를 기준으로 앞에서부터 잘라내어
: : a = Love, b=Hope, c=Human... 같이 다른 변수로 입력시킬수 있는 방법이 있는지요.
: : C++빌더의 질문보다는 C에대한 질문이지만.. 여기에 들어오시는분들중에 C에 익숙한 분들이 많을 것같아서 질문 드립니다.
:
: 안녕하세요 이영수 입니다.
: 아주 간단 합니다.
: AnsiString strSource= "Love#Hope#Human#";
:
: AnsiString strOne = strSource.Substring(1, strSource.Pos('#')-1);
: strSource.Delete(1, strSource.Pos('#'));
:
: 위 두줄을 갯수만큼 코딩하던지 루프을 돌리시던지...
]
안녕하세요 이영수 입니다. 메일을 주셨더 군요!...
AnsiString은 Null 을 종료문자로 인식합니다.
그러니.. char * Type에 data를 집어 넣을 때 끝에다 NULL 즉 '\0'을 삽입하면 됩니다.
예를 들어!!!
char *chTemp = new char[100];
memcpy(chTemp, "Love#Hope#Human",sizeof("Love#Hope#Human"));
한뒤 뒤에다가..
*(chTemp + sizeof("Love#Hope#Human")) = '\0';
이렇게 하면 되죠!!
글구..
Ansistring strTemp = chTemp;
delete [] chTemp;
이런 식으로다 대입하면 됩니다.
그 다음 부턴 위에서 기술한 데로 쓰시면 됩니다.
그리고 메모리 에러는 단 2가지 원인이 있을 수 있습니다.
없는데 접근하라고 했을 때
오버플로우가 발생해..그 오브젝트에 이상이 생겼을 때...그런원인이 대분분이죠!!
소스를 잘 분석해 보세요..혹시 생성과 소멸을 정확히 해주었는지..아니면 할당한 변수용량
이상으로 쓰게 되서...다근 코드에 오버라이트 할 가능성이 없는지..
이상입니다.
도움 되시길..
그리고 멜로 헬프하시면 담부터 답변 안해 드립니다. 죄송!!!!!
|