2011-12-20 18 views
-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; 

}

+4

をご覧ください。コードはありません。私たちはおしゃべりじゃないよ、おい! – LeleDumbo

+2

コードなし、クッキーなし。 – sbi

+0

コードを表示します。また、Cでパーサを実行したい場合は、lex/yaccを見てください。 – Geoffroy

答えて

0

あなたはそのような質問を投稿する前に、基本的な検索を行っている可能性があります。とにかく、Cプログラムを使用してファイルを開いたり、読み書きしたり、ファイルを閉じるためのコードスニペット/サンプルプログラムを探している場合は、here

関連する問題