seq(4000).dat라는 이진파일을 불러오는데
이진파일을 불러와서 txt 문자열로 제대로 출력하는 방법 없나요;
왠지 계속 에러나는게 이것과 관련된 것 같다는 생각이 들어서요;;
http://wiki.kldp.org/wiki.php/DocbookSgml/Beginner_QA-KLDP
http://sebul.sarang.net/
세벌 https://sebuls.blogspot.kr/
void load(FI fi[]){ FILE *fp1, *fp2; char separators[]="|\n"; char data[100]; int k=0,l=0;//인원,필드,데이터 char *tok; if((fp1=fopen("seq(4000).dat","rb"))==NULL){ printf("존재하지 않는 파일입니다.\n"); exit(1); } if((fp2=fopen("input.txt","wb"))==NULL){ printf("파일오류\n"); exit(1); } while(fgets(data,sizeof(data),fp1) != NULL ){ printf("+"); if(tok = strtok(data, separators))fi[z].l=(short)atoi(tok); printf("+"); if ( tok=strtok(NULL,separators) ) fi[z].num=atoi(tok); printf("+"); if ( tok=strtok(NULL,separators) ) fi[z].len=(short)atoi(tok); printf("+"); if ( tok=strtok(NULL,separators) ) strcpy(fi[z].name, tok); printf("+"); if ( tok=strtok(NULL,separators) ) fi[z].f = (float)atof(tok); printf("+"); if ( tok=strtok(NULL,separators) ) fi[z].s = *tok; printf("+"); if(fi[z].l>0){ fprintf(fp2, "%d\n", fi[z].num); z++; } if( z >= MAX) break; } j=z; fclose(fp1); fclose(fp2); } 이런 식으로 코드를 작성했는데, input.txt에는 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 이렇게 되고, 중간에 + 표시를 한 만큼 결과 출력이 되야 할텐데 중간에 printf("%d",z)로 z값을 확인해보니 10이 나오더군요;;
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
에러메지지?
http://wiki.kldp.org/wiki.php/DocbookSgml/Beginner_QA-KLDP
http://sebul.sarang.net/
세벌 https://sebuls.blogspot.kr/
;;;
void load(FI fi[]){
FILE *fp1, *fp2;
char separators[]="|\n";
char data[100];
int k=0,l=0;//인원,필드,데이터
char *tok;
if((fp1=fopen("seq(4000).dat","rb"))==NULL){
printf("존재하지 않는 파일입니다.\n");
exit(1);
}
if((fp2=fopen("input.txt","wb"))==NULL){
printf("파일오류\n");
exit(1);
}
while(fgets(data,sizeof(data),fp1) != NULL ){
printf("+");
if(tok = strtok(data, separators))fi[z].l=(short)atoi(tok);
printf("+");
if ( tok=strtok(NULL,separators) ) fi[z].num=atoi(tok);
printf("+");
if ( tok=strtok(NULL,separators) ) fi[z].len=(short)atoi(tok);
printf("+");
if ( tok=strtok(NULL,separators) ) strcpy(fi[z].name, tok);
printf("+");
if ( tok=strtok(NULL,separators) ) fi[z].f = (float)atof(tok);
printf("+");
if ( tok=strtok(NULL,separators) ) fi[z].s = *tok;
printf("+");
if(fi[z].l>0){
fprintf(fp2, "%d\n", fi[z].num);
z++;
}
if( z >= MAX) break;
}
j=z;
fclose(fp1);
fclose(fp2);
}
이런 식으로 코드를 작성했는데, input.txt에는
-858993460
-858993460
-858993460
-858993460
-858993460
-858993460
-858993460
-858993460
-858993460
-858993460
이렇게 되고, 중간에 + 표시를 한 만큼 결과 출력이 되야 할텐데
중간에 printf("%d",z)로 z값을 확인해보니 10이 나오더군요;;
댓글 달기