如何正确读取文件中的输入?

时间:2011-12-20 12:06:41

标签: c file input

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;

}

1 个答案:

答案 0 :(得分:0)

在发布此类问题之前,您可以进行基本搜索。无论如何,如果您正在寻找使用C程序打开,读取,写入和关闭文件的代码片段/示例程序,请查看here