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 main()
{
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;
}