C程序 - 接收分段故障

时间:2017-05-01 02:34:38

标签: c segmentation-fault

我仍然是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]);

}

1 个答案:

答案 0 :(得分:-1)

你可能会得到这个的原因是因为我猜错了。您在第14行的scanf参数列表中缺少&。您应该执行:scanf("%d",&radix);。你得到了分段错误,因为scanf需要它应该读取的变量的内存地址;因为这是你可以在其范围之外改变变量的唯一方法。但是你的传递scanf("%d", radix),在这种情况下,基数可以包含0或任何垃圾值。当您的程序试图访问该程序不应该读取的内存地址时,操作系统会终止给出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