我正在尝试这项计划,但我失败了。我不知道我哪里错了。 我得到分段错误。可能是错误是由于指针不起作用。
#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;
}
答案 0 :(得分:2)
错误位于函数的最后一行。 bit = &i;
将bit
设置为局部变量i
的地址(变量从函数返回后不再存在)。之后不使用bit
的值,实际上函数的最后一行根本没有效果。并且调用函数(main
)不会收到其bit
变量的更新值。
您需要改为编写*bit = i;
:这会将i
的值写入您的bit
(main
的{{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;
}