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
[51475] 문자열잘라 4byte 정수만들기
intothefree [vartes] 1524 읽음    2007-12-05 04:42
파일을 읽어 데이터를 처리하는 과정에서 궁금한것이 있습니다.

----------------------------------------------------------------
파일구조
[문자열|문자열|문자열|4바이트정수|4바이트정수]
----------------------------------------------------------------
데이터저장부
        str.sprintf("%s|","가");
        fwrite(str.c_str(),Edit1->Text.Length()+1,1,in); // 문자열1

        str.sprintf("%s|","나");
        fwrite(str.c_str(),Memo1->Text.Length()+1,1,in); // 문자열2

        str.sprintf("%s|","다");
        fwrite(str.c_str(),Memo2->Text.Length()+1,1,in); // 문자열3

        tmp = 123456789;
        memcpy(strtemp,&tmp,4);
        fwrite(strtemp,sizeof(int),1,in); // 정수1

        tmp = 666;
        memcpy(strtemp2,&tmp,4);
        fwrite(strtemp2,sizeof(int),1,in); // 정수2

파일크기 17바이트 정상
----------------------------------------------------------------------------
데이터로딩부

       문자열자르는 함수
       스트링은 잘됩니다. |를 만날때까지 읽다가 |를 만나면 문자열로 바꾸어 저장하고 포인터를 증가시켰습니다.

       문제의 정수자르는 함수부분
       int cut_int(unsigned char * str)
       {
             int value;
            
             memcpy(&value,str,4); <- 4byte를 잘라 int로 값치환    ********** 쓰레기가값 발생부분
             strcpy(str, str+4); <- str 버퍼에서 읽은 부분(4byte)은 잘라내고 다음으로 시작포인터를 옮김
             return value;
       }

       void load_values()
       {
              unsigned char * buffer;
              //test.txt 파일에서 읽어 버퍼에 넣음
              Edit1->Text = cut_string(buffer);
              Edit2->Text = cut_string(buffer);
              Edit3->Text = cut_string(buffer);
              Edit4->Text = IntToStr(cut_int(buffer));
              Edit5->Text = IntToStr(cut_int(buffer));
       }
----------------------------------------------------------------------------

**** 문제는 4바이트 정수를 읽어서 int로 바꾸는건데 요부분이 잘 안됩니다.

문자열의 길이를 알아서 그 만큼 건너뛰고 fread()를 하면 별문제가 없습니다.
문자열의 길이는 가변적입니다. 그러나 [|] 를 구분자로 사용하였고 연산을 하기위해 파일을 읽어 str 변수에담아 처리하려고 하는데 이상한 쓰레기값이 결과가 나옵니다.

요점정리 : 문자열길이가 유동적이라 파일에서 직접 읽지않고 함수에서 str 변수에 파일을 전부 읽어들여서 버퍼에서 잘라 사용하고자 하는데 위의방법으로는 작동이 안됩니다.

문제가 무엇인지요.. 텍스트파일을 만들어 첨부했습니다.




123456789
666 

이렇게 나누고싶은데 방법이 없을까요

+ -

관련 글 리스트
51475 문자열잘라 4byte 정수만들기 intothefree 1524 2007/12/05
51491     Re:문자열잘라 4byte 정수만들기 라스코니 1601 2007/12/05
51476     Re:문자열잘라 4byte 정수만들기 열씸! 1920 2007/12/05
51484         재질문 intothefree 1103 2007/12/05
51500             Re:재질문 열씸! 1212 2007/12/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.