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
[40800] 답답해서 다시한번 배열에 관한 질문을 올립니다.
다꾸엔젤 [] 810 읽음    2005-06-29 09:41
몇일동안 삽질하다가 결국은 도저히 이해가 가질 않습니다.

지금까지 별의별 방법을 다써도 여전히 쓰레기 값이 올라가는군요..

답답해서 프로그램을 통째로 올립니다.

다소 허접한 프로그램이지만 제가 BC++을 입문한지 얼마되지 않아서..^^

일단 프로그램의 개요는 이렇습니다.

소켓통신으로 320바이트 만큼 읽어옵니다.

읽어오는 값은

"95                                                                                  0111241111                                                                                                                                                                                                                                  "

이러한 값을 클라이언트에서 읽어옵니다.

320바이트지요...

일단 공백부분은 NULL값이 아닌 공백값(" ") 입니다.

읽어온 값중에서 0111231111이라는 값을 뽑아서 데이터 베이스에서 "#"을 토큰으로 하는 값을 뽑아옵니다.

0111231111#ABC#37.529167#126.871944#20041123133102#123456#가나다라마 바사 아자차카타

데이터베이스에서 읽어오는 값은 위와 같습니다.

위의 값을 strtok()로 짤라서 해당 배열에 넣으면

        strcpy(baBill, "96");
        strcat(baBill, "00");
        strcat(baBill, btyrespMsg);
        strcat(baBill, btyTelnum);
        strcat(baBill, btyXpos);
        strcat(baBill, btyYpos);
        strcat(baBill, btyZipcode);
        strcat(baBill, btyAddr);
        strcat(baBill, btyPoiinfo);
        strcat(baBill, btyFiller);

이 구문의 btyAddr 값에서 자꾸 쓰레기 값이 흘러 들어가는군요...

이러한 현상이 나타나는 원인과 해결 방안을 알고 싶습니다.

두번째로 분명히 배열값을 주었는데도 불구하고 320바이트의 값이 초과해 버려도 322바이트라던지 330바이트의

초과된 값이 배열에 들어가는 현상이 발생합니다.

제가 배열을

byte baBill[320];
byte btyZipcode[6];
byte btyrespMsg[80];
byte btyTelnum[20];
byte btyXpos[10];
byte btyYpos[10];
byte btyAddr[80];
byte btyPoiinfo[80];
byte btyFiller[30];

이런식으로도 초기화 시켜 보았고

byte *baBill= new char[320];
byte *btyZipcode = new char[6];
byte *btyrespMsg = new char[80];
byte *btyTelnum = new char[20];
byte *btyXpos = new char[10];
byte *btyYpos = new char[10];
byte *btyAddr = new char[80] ;
byte *btyPoiinfo = new char[80];
byte *btyFiller = new char[30];

위와 같은 방법으로도 초기화 시켜 보았습니다.

또한 byte가 아닌 char 형으로도 두방법 다 사용해 보았지만 별 효과가 없었습니다.

사정이 이렇다 보니 마지막에 return값을 받고 클라이언트에 write하면 값이 몇번 전송되다가 멈추어 버립니다.

디버깅해보니 read하고 해당 리턴값이 320바이트를 초과해 버리니 320바이트를 보내는데 처음은 잘 들어가고 한번 더

돌아가면서 값을 보내버리는 현상이 발생합니다.

프로그램 짜면서 이렇게 복잡하게 얽힌 문제는 처음입니다.

질문이 다소 길어졌는데 많은 의견 부탁드립니다..

몇일동안 머리가 터지겠습니다....ㅠ.ㅠ

그럼 좋은 하루 되세요...

+ -

관련 글 리스트
40800 답답해서 다시한번 배열에 관한 질문을 올립니다. 다꾸엔젤 810 2005/06/29
40842     Re:답답해서 다시한번 배열에 관한 질문을 올립니다. 다솜돌이 946 2005/07/01
40806     Re:답답해서 다시한번 배열에 관한 질문을 올립니다. 마술감자 747 2005/06/29
40812         Re:Re:답답해서 다시한번 배열에 관한 질문을 올립니다. 다꾸엔젤 773 2005/06/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.