fscanf 초보적 질문입니다.
글쓴이: heavenlyheavens / 작성시간: 수, 2008/01/16 - 11:51오전
double maximum, am, ti, j, k, amplitude;
double ep[ 20 ];
char ar[ 20 ];
char m;
char sac[ 20 ];
int main(void)
{
sel = fopen( "selected.txt" , "rt" );
epi = fopen( "epi_dis.txt" , "rt" );
fscanf( epi , "%lf" , &ep[ i ] );
fscanf( sel , "%s" , &ar[ i ] );
sprintf( sac , " \\%s " , ar[ i ]);
FILE *SACFILE=fopen( sac , "wt" );
fscanf( SACFILE, "%lf %lf", &ti, &am );
컴파일 시 오류는 없습니다만 실행시 fscanf에서 메모리 참조 오류가 나서 꺼지고 맙니다.
어떤 기술적인 문제가 있는 것인지요? 잘 이해가 가지 않아 이렇게 질문 드립니다.
감사합니다 ^^
Forums:
char와 char *의 차이입니다.
char ar[20];
...
fscanf( sel , "%s" , &ar[i] );
이 부분이네요.
선언은 char로 하시고
fscanf에서는 %s (char *)로 읽으니 메모리가 깨지지요.
%c 로 바꿔서 읽으시면 됩니다.
char *로 읽으시려면,
fscanf( sel , "%s" , ar );
이렇게 하면 됩니다만,
이것도 메모리크기를 넘어설 경우 스택을 깨먹을 가능성은 농후합니다.
안전하게 처리하려면,
fgets 로 읽어들이고 나서 sscanf나 포인터 연산으로 변수에 값을 할당하는 것이 좋습니다.
아!!!
감사합니다.
큰 도움 주셨습니다.
얼른 공부해서 더 좋은 코딩을 해보겠습니다!
댓글 달기