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
[20157] Re:파일 출력부분 에러...
유영인.Chris [cuperido] 932 읽음    2002-07-16 11:11
배열이 fre[3] 이렇게 정의된 배열에서 사용하실 수 있는 방은, C의 경우 fre[0], fre[1], fre[2] 번 입니다. fre[3] 은 사용하실 수 없으며, 만약에 사용을 하시게 된다면, 선언된 다른 변수의 메모리까지 침범하게 되어, 그 메모리에 값을 써버립니다.

그렇기 때문에, Pos나 다른 값들이 이상하게 바뀌는 것이구요.
그리고, Tmp의 크기는 73이 아닌, 줄의 크기보다 넉넉하게 잡아두시는 것이 좋습니다. 줄이 한줄만 커지면, 위와같은 에러가 또 생기니깐요.

또, 텍스트 파일을 읽으실때는, fseek, fread 의 사용보다 fgets 를 사용하시는 것이 좋습니다. fseek, fread 두줄 대신에, fgets(Tmp, sizeof(Tmp), in); 이렇게 사용하시면, 한줄씩 차근차근 Tmp에 넣으실 수 있습니다.


멘땅에 헤딩 님이 쓰신 글 :
: : : : : : :
:
        FILE : *in;
        char fre[3], : Mag[3];
        char : Tmp[73];
        unsigned : Pos=0;
        int i=1, j, freTmp, : magTmp;
:
 
:
        if ((in = fopen : ("data_test.txt", "rt")) == NULL)
        : {
                : ShowMessage("파일이 열리지 : 않았습니다.");
                : return;
        }
:
        while( i <= : 150)
        {
:
                : fseek(in, Pos, : SEEK_SET);
                : fread(Tmp, 73, 1, in);
:
                : for(j = 0; j < 3; : j++)
                : {
                        : fre[j] = : Tmp[j];
                : }
                : fre[3] = : '\0';
                : freTmp = atoi(fre);
:
                : for(j = 4; j < 7; : j++)
                : {
                        : Mag[j-4] = : Tmp[j];
                : }
                : Mag[3] = : '\0';
                : magTmp = atoi(Mag);
:
                : Chart1->Series[0]->AddXY((double)i, (double)freTmp, "", : clTeeColor);
                : Chart1->Series[1]->AddXY((double)i, (double)magTmp, "", clTeeColor);
:
                : i = i + : 1;
                : Pos = Pos + 74;
:
        }
:
        fclose(in);
:
 
:
data_test.txt라는 파일을 읽어서 제가 원하는 데이터만 뽑은후 TChart에 뿌려줄려고 하는데..뜻대로 되지 : 않네요..
:
파일은 한 line에 72byte 널문자 포함해서 74byte입니다..그래서 한 line씩 읽어서 임의 변수에 저장하고 그 변수를 : 챠트에 넣어주는 소스인데 제 맘대로 파일포인터가 움직이질 않네요...
:
제가 파일 구조를 제대로 파악하지 않은건지..아님..파일함수들을 잘 못 쓴건지...
:
디버깅하면서 쫓아가보니..계속 같은 값만 읽고 있더라구요...
:
ftell()함수를 사용해서 파일 포인터 위치를 알아보면..40억이라는 어마어마한 숫자가 나오고...와!! : 미치겄습니다..^^  data_test.txt 파일도 같이 첨부했습니다..무엇이 잘못 : 된건지..갈쳐주세요...
: :
:

+ -

관련 글 리스트
30201         Re:Re:파일 출력부분 에러... 마법감자 820 2002/07/16
20157     Re:파일 출력부분 에러... 유영인.Chris 932 2002/07/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.