2013-11-09 53 views
0

我试图让这个程序工作,但我失败了。我不知道我错在哪里。 我得到分段错误。这可能是错误是由于指针不起作用。二进制分割错误转换

#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

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

你需要写*bit = i;代替:这个会写的i值放入变量指向由bitmainbit你的情况)。

+0

现在确定它可以工作,但不完全。它被执行,但我没有得到我方面的结果。例如,如果我插入数字3,我将得到15785073521 – Mazzy

+1

这可能是因为你已经填充了'ris [0 ... bits-1]',但是你正在打印'ris [1 ... bits]'。试试'printf(“%d”,ris [i-1]);'(或者* *(ris + i-1)'如果你喜欢这种形式)。 – Inspired

+0

是的,当然......多么愚蠢的错误......非常感谢你! – Mazzy

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; 
}