저는 Dev C++를 사용하는 프로그램을 만들고 있습니다. 내 프로그램을 실행하는 동안 종료됩니다. 디버깅시 의 'segmentation fault'가입니다. 무한 루프가 될지 모르겠습니다. 문제가 while(!feof(program))
또는 fscanf(...)
코드에있는 경우 알 수 없습니다.feof 또는 fscanf 오류
누구든지 해결할 수 있습니까? 아래에있는 내 프로그램 참조 :
이 코드 몇 가지 문제가 있습니다#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
fpos_t curDesStart,curDesEnd;
fpos_t curDesLocBackup,curDes;
char *label,*opc,*operands;
char *curMacroName;
FILE *namTab,*desTab,*temp,*program;
namTab=fopen("namTab.txt","rw");
desTab=fopen("desTab.txt","rw");
temp=fopen("temp.txt","w");
program=fopen("program.txt","r");
while(!feof(program))
{
fscanf(program,"%[^\n]%[^\n]%[^\n]",label,opc,operands);
if(!strcmp(label,"MACRO"))
{
fprintf(desTab,"%s%s%s\n",label,opc,operands);
fgetpos(desTab,&curDesStart);
strcpy(curMacroName,label);
while(!strcmp(opc,"MEND"))
{
fscanf(program,"%s%s%s",label,opc,operands);
}
fprintf(desTab,"%s%s%s\n",label,opc,operands);
fgetpos(desTab,&curDesEnd);
fprintf(namTab,"%s%ld%ld\n",curMacroName,curDesStart,curDesEnd);
}
else
{
while(!feof(namTab))
{
fgetpos(desTab,&curDesLocBackup);
fscanf(namTab,"%s%ld%ld",curMacroName,curDesStart,curDesEnd);
if(!strcmp(curMacroName,label))
{
fsetpos(desTab,&curDesStart);
fscanf(desTab,"%s%s%s\n",label,opc,operands);
fprintf(temp,".%s%s%s\n",label,opc,operands);
do{
fprintf(temp,"%s%s%s\n",label,opc,operands);
fgetpos(desTab,&curDes);
}while(curDes<=curDesEnd);
fsetpos(desTab,&curDesLocBackup);
fsetpos(namTab,0);
}
else
{
fprintf(temp,"%s%s%s\n",label,opc,operands);
}
}
}
}
fclose(program);
fclose(namTab);
fclose(desTab);
fclose(temp);
getch();
return 0;
}
C++은 C와 다릅니다 (하지만 dev C로 컴파일하면 코드가 C로 변경되지 않습니다). 따라서이 링크는 완전히 적용 할 수 없지만 http://stackoverflow.com/questions/5431941을 읽어보십시오./while-feof-file-is-always-wrong –
'feof()'를 사용하여 입력 루프의 종료를 제어하지 마십시오. 입력 함수의 결과를 사용하십시오. 'feof()'는 파일의 끝이나 에러 ('ferror()')로 인한 것인지 아닌지를 판단하기 위해 입력이 부족한 * 후에 * 사용할 수 있습니다. –