2011-10-28 20 views
0

EDIT:適切に私の文字をintilizingしようとするために、約... [didntの仕事=(]私がscanf(%s、lastName)を実行すると、セグメント化エラーが発生します。 (内部のボディコード)

EDIT:解決しよう(私は別の7時間の自分の質問に答えることはできません...)

コメントブライアンのための

おかげで、それは(それが= 20)。..先頭で宣言だけで定数です。

は、それは私が入力にかかった後、私は次の行を追加するのを忘れているため、エラーが起こっていたが判明します

現在作業中です= D

:私はコードの下に私のコード、基本的に私は、最初の名前に入れ、これはその後、私は最後の名前に入れ

ジョン

を見つけることENDEDIT(笑)

想定されてきました...

ロック

とすぐ、私は「ロック」に入力すると、このエラーを打つ、私は多分それはscanfのだように感じると私はより良い代替手段を使用する必要があります?

int findPatron(struct Library *lib,struct Patron **p) 
{ 
    int i; 
    char firstName[NAME_LENGTH], lastName[NAME_LENGTH]; 
    printf("\nPlease enter the patron's first name: "); 
    scanf("%s",firstName); 
    printf("\nPlease enter the patron's last name: "); //this line prints... 
    scanf("%s",lastName); //SEGMENTATION ERROR happens here I'm pretty sure. 
    printf("deerrrr"); //this line never prints 
    for(i = 0; i<lib->totalPatrons;i++) 
    { 
      printf("checking %s %s to %s %s",lib->patrons[i].name.first,lib->patrons[i].name.last,firstName,lastName); 
      if((strcmp(lib->patrons[i].name.first, firstName) == 0) && (strcmp(lib->patrons[i].name.last, lastName) == 0)) 
      { 
        **p = lib->patrons[i]; 
        return 0; 
        break; 
      } 
    } 

    return 1; //No Match! 
} 

答えて

0

あなたは、セグメンテーションフォールトに後のあなたのscanf()文を取得しています。

あなたはprintf("deerrrr");後にすべてのものを削除して、バッファがフラッシュされるように、その出力に\nを追加した場合、あなたはそれがすべてうまく動作することを見つけることができます(NAME_LENGTH提供はあなたの例の入力を与え、少なくとも6があります)。

プログラミングの一部は、問題の切り分けとデバッグの方法を知っています。

あなたの問題はあなたのループにあり、lib構造体である - あなたがするべきではないものを逆参照しています。

+0

ありがとうございます。問題は私のルピーであった、私はそのダブルポインタを使っていたので、** p = lib->パトロン[i]のためだけに使うべきだったので、* p =&lib->パトロン[i]だった。 – ChrisB92

0

セグメンテーションエラーがここで起こる、私はこの行が

C言語のprintfがバッファリングされ、そして唯一のFFLUSHするための明示的な呼び出しやscanfのようなブロックアクション(でフラッシュを取得します、これは印刷されません かなり確信していますAFAIKも標準出力をフラッシュします)、エラーは別の場所で発生する可能性があります。デバッガを使用する方法を学んでください。それはCプログラムをデバッグする適切な方法です。

+0

私は、デバッガを使うのが早くて、30秒ごとに少ししか書いていないことを確信しています。(私はデバッガを使用するべきであるかどうかを決めるのに何の苦労もしません。 – ChrisB92

関連する問題