-2
INITIALIZE 100
ALLOC 20
ALLOC 10
FREE 16
ALLOC 19
FILL 16 19 255
FILL 48 10 127
DUMP
SHOW ALLOCATIONS
ALLOC 1
SHOW USAGE
FINALIZE
これは説明の一例です。行ごとに挿入すると、プログラムが動作します。私がファイルからそれらのすべてを読むと、私はセグメンテーションフォールトを得る。入力ファイルから読み込むことが重要です。どこに問題がありますか?明確にするために、プログラムでファイルを読む必要はありません。ファイルを標準入力にリダイレクトする必要があります。これは私のコマンドと入力を比較する方法です。ファイルからの入力を正しく読み取るにはどうすればよいですか?
メインint型()
{
int n,c,d,e;
char *s, *p, init[100]="INITIALIZE", fin[100]="FINALIZE", dmp[100]="DUMP", allc[100]="ALLOC", fre[100]="FREE", fil[100]="FILL", shw[100]="SHOW", usg[100]="USAGE", alc[100]="ALLOCATIONS";
unsigned char *arena;
s=(char*)malloc(100*sizeof(char));
while (1)
{
gets(s);
p=strtok(s," ,.-");
while(p!=NULL)
{
if(strcmp(p,init)==0)
{
p=strtok(NULL," .,-");
n=atoi(p);
arena=initialize(n);
}
if(strcmp(p,fin)==0) { finalize(arena); }
if(strcmp(p,dmp)==0) { dump(arena,n); }
if(strcmp(p,allc)==0)
{
p=strtok(NULL," ,.-");
c=atoi(p);
alloc(c,arena,n);
}
if(strcmp(p,fre)==0)
{
p=strtok(NULL," ,.-");
c=atoi(p);
freeb(arena,c);
}
if(strcmp(p,fil)==0)
{
p=strtok(NULL," ,.-");
c=atoi(p);
p=strtok(NULL," ,.-");
d=atoi(p);
p=strtok(NULL," ,.-");
e=atoi(p);
fill(arena,c,d,e);
}
if(strcmp(p,shw)==0)
{
p=strtok(NULL," ,.-");
if(strcmp(p,fre)==0) { showfree(arena,n); }
if(strcmp(p,usg)==0) { showusage(arena,n); }
if(strcmp(p,alc)==0) { showallocations(arena,n); }
}
p=strtok(NULL," ,.-");
}
}
return 0;
}
をご覧ください。コードはありません。私たちはおしゃべりじゃないよ、おい! – LeleDumbo
コードなし、クッキーなし。 – sbi
コードを表示します。また、Cでパーサを実行したい場合は、lex/yaccを見てください。 – Geoffroy