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;
}
最佳答案
您可以在发布此类问题之前进行基本搜索。无论如何,如果您正在寻找使用 C 程序打开、读取、写入和关闭文件的代码片段/示例程序,请查看 here
关于c - 如何正确读取文件中的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8575184/