fseek 사용도중 한칸 뒤로 했는데 파일 포인터 거의 처음으로 가
글쓴이: kknd345 / 작성시간: 수, 2005/04/06 - 9:52오후
문제되는 소스코드는 아래와 같은데요
디버그 모드중에서 확인해 보니 전 원래
fseek( rfp, -1, SEEK_CUR );해서 한칸 뒤로간다고 생각하고 했는데 파일 포인터 거의 처음으로 가버립니다.
무엇이 잘 못 된걸까요? pAssociative->rfp=fopen("strset.inp","r");
void cAssociative::getOneStr( void ) { int i=0; while( (tmp=fgetc(rfp)) == 32 ){ } if( fseek( rfp, -1, SEEK_CUR ) != 0 ) { //fprintf(wfp,"ERROR FSEEK\n"); exit(1); }//====스페이스 제거문===============// tmp=fgetc(rfp); while( ((tmp=fgetc(rfp)) != 32) && (tmp != '\n') && (tmp != EOF) ) // 32 is space { tmp=toupper(tmp); // key 값은 모두 대문자 해야 하므로 사용한다 tempStr[i] = tmp; i++; checkPrepare = false; } if( tmp == '\n' ) checkPrepare = true; if( tmp == EOF ) checkEnd = true; tempStr[i]='\0'; }
Forums:
텍스트 문서가 이상해서 그랬던 것 같습니다.엔터 대신에 네모난것이
텍스트 문서가 이상해서 그랬던 것 같습니다.
엔터 대신에 네모난것이 들어가있길래
네모를 엔터로 고치고 하니 제대로 되네요.
네모 도대체 무엇인지는 모르겠습니다.
여기에 붙여넣기 하니깐 자동으로 엔터 취급되더군요.
1%의 가능성이면 충분하다!
최선을 다하자!
파일에 들어가 있는 값을 잘 확인 해보세요.fseek()의 사용법에는
파일에 들어가 있는 값을 잘 확인 해보세요.
fseek()의 사용법에는 문제가 없는듯 합니다.
만약에 의심스러우면 각 단계에서값을 찍어 보시는것도 좋은 방법일 듯 하네요.
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
어떤 의미있는 문자열을 끊어내는 것 같은데.. 이 목적으로 단순히 ASC
어떤 의미있는 문자열을 끊어내는 것 같은데.. 이 목적으로 단순히 ASCII code 32인 ' '을 제거하는 것은 바람직하지 않습니다. 왜냐하면, 두번째 쓰신 것처럼, 원하지 않는 문자가 들어올 수 있기 때문입니다. 따라서 의미있는 문자열을 이루는 문자가 어떤 범위에 있는지 결정하고, 그것만 읽어내는 것이 더욱 좋습니다. 이 목적으로 isprint()와 같은 함수를 쓸 수도 있습니다.
반대로 문자열을 이루지 않는 공백 문자 등을 제거하기 위해서는 isspace()를 쓰는 것이 단순히 ' '을 검색하는 것보다 좋습니다. isspace()를 쓰면 ' ' 뿐만 아니라 '\t', '\v' 등을 걸러낼 수 있습니다.
그리고 여담으로, ' '을 위해 수치 32를 쓰는 것은 별로 좋은 습관이 아닙니다. 차라리 ' '를 직접 쓰는 것이 좋습니다. 꼭, 수치를 써야 겠다면 macro로 정의해 두고 이 매크로를 쓰는 것을 고려하기 바랍니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기