C程序 - 接收分割故障



我对C编程仍然相对较新,并且遇到了我以前从未见过的错误。我编写了一个程序,该程序基于第二个输入,将第一个INT转换为其各自的Radix形式。我不是在问如何解决问题,我只是在问我在哪里出错以收到此错误。我已经进行了一些研究,并且知道分割错误与指针有关,并且我和我一起玩了,并且没有运气,而摆脱了这一错误。任何帮助将不胜感激!

    #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]);
}

您可能会得到的原因是我猜是错字。您在第14行上的SCANF参数列表中缺少&。相反,您应该做:scanf("%d",&radix);。您会得到细分故障,因为SCANF期望它应该读取的变量的内存地址;因为这是您可以在其范围之外更改变量的唯一方法。但是您通过的scanf("%d", radix),在这种情况下,radix可以包含0或任何垃圾值。当您的程序试图访问该内存地址(不应该由程序读取的内存地址(时,OS终止了程序分割故障的程序。在更改此事时,我将获得输出:

~/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

相关内容

  • 没有找到相关文章

最新更新