2016-11-20 10 views
0
void search(FILE *fp){ 
    char lines[81]; 
    char iden[11]; 


int i = 0; 
    int count = 1; 
    while(!feof(fp)){ 
     fgets(lines,80,fp); 
     // If the line dosesn't start with #, space, or tab, it has identifier 
     if (lines[0] != '#' && lines[0] != ' ' && lines[0] != '\t'){ 
     // An identifier ends with ':' 
     while (lines[i] != ':'){ 
      iden[i] = lines[i]; 
      ++i; 
     } 
     ins(iden, count); 
     } 
      ++count; 
    } 
} 

私は取得しています。このようなエラー:このセグメンテーションエラーを取り除くにはどうすればよいですか?

p4.c:93:12:ランタイムエラー:タイプの範囲外のインデックス11 'のchar [11]'

p4.c:92 17:ランタイムエラー:インデックス81種類の境界のうち 'チャー[81]'

p4.c:93:22:ランタイムエラー:タイプの境界のうちインデックス81 'のchar [81]'

セグメンテーションエラー

注:私の入力ファイルには上記のエラーチェックによるデータが含まれています。私は各行を最大80文字で\ n、識別子の最大サイズは10であることを意味します。 '#'またはスペースまたはタブで始まらない行には、行の先頭に ' : '最大サイズが10の場合': '

上記のコードで2番目のループで起きていますか? このエラーが発生するのはなぜですか?

p.s:私はすでに私のファイルを開いて、あなたはカウンターiをリセットしたことがないと識別子にターミネータを追加していない私の主な方法

+0

'(feof(fp)){ fgets(lines、80、fp);' feof()は常に間違っているhttp://stackoverflow.com/q/5431941/905902 – wildplasser

+0

これを修正する方法は? –

+0

feof()を削除し、代わりにfgets()の戻り値を使用します。 – wildplasser

答えて

0

でそれを確認しました。

i=0; 
while (lines[i] != ':'){ 
    iden[i] = lines[i]; 
    ++i; 
} 
iden[i]='\0'; 

しかし、安全のためにあなたが保護に入れなければならないので、実際に使用します:

はそうしようと

while (lines[i] != ':' && i<10){ 

入力を信用していないし、常にあなたのプログラムは、その変数の限界を超えることはありませんことを確認しないでください。

関連する問題