分段故障转换为二进制

时间:2013-11-09 21:38:24

标签: c pointers

我正在尝试这项计划,但我失败了。我不知道我哪里错了。 我得到分段错误。可能是错误是由于指针不起作用。

#include <stdio.h>
#include <stdlib.h>

void ConvertBin(int n, int *ris,int *bit);

int main(int argc, char *argv[]) 
{
    int n;
    int ris[20];
    int bit;

    printf("Insert num: "); scanf("%d", &n);

    ConvertBin(n,ris,&bit);

    for (int i=bit; i!=0; i--) 
    {
        printf("%d", *(ris+i));
    }   

    return 0;
}

void ConvertBin(int n, int *ris, int *bit)
{
    int i = 0;

    while (n!=0)
    {
        *(ris+i) = n%2;
        n = n/2;
        i++;
    }

    bit = &i;
}

2 个答案:

答案 0 :(得分:2)

错误位于函数的最后一行。 bit = &i;bit设置为局部变量i的地址(变量从函数返回后不再存在)。之后不使用bit的值,实际上函数的最后一行根本没有效果。并且调用函数(main)不会收到其bit变量的更新值。

您需要改为编写*bit = i;:这会将i的值写入您的bitmain的{​​{1}}中的变量指针中情况)。

答案 1 :(得分:0)

问题出现在变量i中,这比它应该大一点。 这应该可以正常工作:

#include <stdio.h>
#include <stdlib.h>

void ConvertBin(int n, int *ris,int *bit);

int main(int argc, char *argv[]) 
{
    int n;
    int ris[20];
    int bit;

    printf("Insert num: "); scanf("%d", &n);

    ConvertBin(n,ris,&bit);

    for (int i=bit; i>=0; i--) 
    {
        printf("%d", *(ris+i));
    }   

    return 0;
}

void ConvertBin(int n, int *ris, int *bit)
{
    int i = 0;

    if( !n ){
        *(ris) = 0;
        i++;
    } else{
        i = 0;
        do
        {
            *(ris+i) = n%2;
            n = n/2;
            i++;
        } while (n!=0);
    }
    *bit = i -1;
}