C 分段故障的二进制转换

C 分段故障的二进制转换,c,pointers,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 n

我正试图在这个项目中找到工作,但失败了。我不知道我错在哪里。 我犯了一个错误。这可能是由于指针不工作导致的错误

#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;
}
#包括
#包括
void ConvertBin(int n,int*ris,int*bit);
int main(int argc,char*argv[])
{
int n;
int-ris[20];
整数位;
printf(“插入数字:”;scanf(“%d”和“&n”);
ConvertBin(n、ris和bit);
for(int i=bit;i!=0;i--)
{
printf(“%d”,*(ris+i));
}   
返回0;
}
void ConvertBin(int n,int*ris,int*bit)
{
int i=0;
而(n!=0)
{
*(ris+i)=n%2;
n=n/2;
i++;
}
位=&i;
}

错误在函数的最后一行<代码>位=&i
位设置为局部变量
i
的地址(从函数返回后,变量不再存在)。此后不使用
位的值
,事实上,函数的最后一行完全无效。调用函数(
main
)不接收其
变量的更新值


您需要编写
*bit=i取而代之:这将把
i
的值写入变量指针,该指针指向by
bit
main
bit
)。 这应该很好:

#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;
}
#包括
#包括
void ConvertBin(int n,int*ris,int*bit);
int main(int argc,char*argv[])
{
int n;
int-ris[20];
整数位;
printf(“插入数字:”;scanf(“%d”和“&n”);
ConvertBin(n、ris和bit);
对于(int i=bit;i>=0;i--)
{
printf(“%d”,*(ris+i));
}   
返回0;
}
void ConvertBin(int n,int*ris,int*bit)
{
int i=0;
如果(!n){
*(ris)=0;
i++;
}否则{
i=0;
做
{
*(ris+i)=n%2;
n=n/2;
i++;
}而(n!=0);
}
*位=i-1;
}

现在可以了,但不是完全可以。它被执行了,但是我没有得到我想要的结果。例如,如果我插入数字3,我将得到15785073521,这可能是因为您填写了
ris[0…bits-1]
,但您正在打印
ris[1…bits]
。试试printf(“%d”,ris[i-1])(或
*(ris+i-1)
如果您喜欢此表格)。