ошибка feof или fscanf

Я делаю программу, я использую Dev C ++. Во время работы моя программа завершается.
На отладке это говорит «ошибка сегментации». Я не знаю, пойдет ли это в бесконечный цикл.
Я не знаю, если проблема с while(!feof(program)) или 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;
}

0

Решение

Есть несколько проблем с этим кодом:

  • если program.txt не существует, fopen () вернет NULL
  • fscanf (% […]) или fscanf (% s) ожидает указатель на символ, который должен предоставить достаточно
    место для текста читать плюс завершающий нуль байт (см. http://pubs.opengroup.org/onlinepubs/007904975/functions/scanf.html)
  • fscanf (% ld) ожидает указатель на long, а не long
0

Другие решения

У вас нет ни одного выделенного хранилища для любого из ваших char *s, чтобы указать, и вы даже не инициализировали их, чтобы указать на что-то еще. В результате вы по существу передаете случайные числа в fscanf, что приводит к неопределенному поведению, одним из возможных воплощений которого является аварийное завершение программы.

0

По вопросам рекламы [email protected]