2017-05-01 8 views
0

私はまだCプログラミングに比較的新しいですし、これまで見たことのないエラーに遭遇しました。私は2つのintをとり、第1のものを第2の入力に基づく基数のそれぞれの形式に変換するプログラムを書いています。私はこの問題を解決する方法を尋ねていません、私はこのエラーを受け取るためにどこが間違っているかを尋ねています。私はいくつかの研究を行い、セグメンテーションの失敗はポインタと関係していることを知り、私は私の周りで遊んでいて、このエラーを取り除くことに運がなかった。どんな助けでも大歓迎です!Cプログラム - セグメンテーションフォールトを受信

#include<stdio.h> 

    void decimalToRadix(int d, int r, char *toRadix); 

    int main(void){ 

     int decimal, radix; 
     char toRadixForm[100]; 

     printf("Enter a decimal number: "); 
     scanf("%d",&decimal); 

     printf("Enter radix number: "); 
     scanf("%d",radix); 

     decimalToRadix(decimal, radix, toRadixForm); 
     puts(""); 
    return 0; 
    } 

    void decimalToRadix(int decimal, int radix, char *toRadix){ 

     int result; 
     int i=1,x,temp; 
     result=decimal; 

     //will loop until result is equal to 0 
     while(result!=0){ 

     //get the remainder 
     temp=result%radix; 

     //if<10 add 48 so character format stored values are from 0-9 
     if(temp<10) 
     temp=temp+48; 

     //if greater that or equal to 10 add 55 to it stores values A-Z 
     else 
     temp=temp+55; 

     toRadix[i++]=temp; 
     result=result/radix; 

    } 
    printf("The value of the number you entered, %d, to radix form is ", decimal); 

    for(x=i-1; x>0; x--){ 
     printf("%c", toRadix[x]); 

} 
+2

これをデバッグする方法は、デバッガを使用することです。 – kaylum

+0

@kaylum私は通常、エラーが発生したときにそれを1行ずつステップ実行します。どんなデバッガにもあまり馴染んでいないので、私は元の投稿に言い直すべきでしょう。私はあなたの応答に感謝します。 – Corey

+2

'scanf("%d "、基数);と' scanf( "%d"、&decimal);を慎重に比較します。 – BLUEPIXY

答えて

-1

これは、誤植のためです。あなたは、行14のscanf引数リストに&がありません。代わりに:scanf("%d",&radix);を実行する必要があります。 scanfが読み取るはずの変数のメモリアドレスを期待しているため、Segmentationフォルトが発生していました。その変数がスコープの外にある変数を変更できる唯一の方法だからです。しかし、あなたの値はscanf("%d", radix)になります。この場合、基数には0または任意のガベージ値を含めることができます。あなたのプログラムがプログラムによって読み込まれるべきではないメモリアドレスにアクセスしようとすると、OSはSegmentation Faultというプログラムを終了します。これを変更すると出力が得られました:

~/Documents/src : $ ./a.out 
Enter a decimal number: 12 
Enter radix number: 2 
The value of the number you entered, 12, to radix form is 1100 
+0

ありがとう! @BLUEPIXYはそれを上に指摘した。どのように私がそれを忘れて、それを見落としたかわからないが、明らかに、このプログラムが走るのに必要である。私はあなたの応答に感謝します。 – Corey

関連する問題