배열이 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 파일도 같이 첨부했습니다..무엇이 잘못
: 된건지..갈쳐주세요...
:
:
: