我最近开始用C编程,无论我怎么努力,我都无法在这里找到错误。
char* dec2Bin(int number) {
char* bin = calloc(9, sizeof(char));
if(bin!=NULL) {
bin[8] = '\0';
int i = 7;
while(number != 0 && i>=0){
bin[i] = (number%2) +'0';
number/=2;
i--;
}
}
return bin;
}
int main() {
int number;
printf("Enter a number: ");
scanf("%d", &number);
char* bin = dec2Bin(number);
if(bin!=NULL) {
printf("%s", bin);
free(bin);
return EXIT_SUCCESS;
}
return EXIT_FAILURE;
}
输入数字后没有显示任何内容,奇怪的是,当我在函数循环中执行printf时,它会为bin [i]打印一些内容。
先谢谢你的帮助。
答案 0 :(得分:2)
尝试:
char* int2Bin(int number)
{
int bits = sizeof(int) * CHAR_BIT;
char* bin = calloc(bits + 1, sizeof(char));
bin[bits] = '\0';
for (int i = bits - 1; i >= 0; i--)
{
bin[i] = (number % 2) + '0';
number /= 2;
}
return bin;
}
说明:CHAR_BIT
(在<limits.h>
中)是char
中的位数,sizeof(int)
是char
中int
的位数{1}}。
您的代码可能不显示任何内容,因为您的循环在到达分配的数组的第一个char之前停止,因此这可能仍为'\0'
,因此被视为空字符串。
您可以执行以下操作:
,而不是使用较慢的%
和/
bin[i] = (number & 1) + '0';
number >>= 1;
答案 1 :(得分:2)
void *calloc(size_t nmemb, size_t size)
分配nmemb
个内存块,并使用0
初始化它们,这个场景的字符串为\0
字符。现在,printf
将打印bin
字符串,直到它获得\0
字符。让我们举个例子。如果我输入12
,则输出应为1100
。但是在bin
字符串中,它是\0\0\0\01100\0
。因此printf
在遇到第一个\0
字符后停止打印。
答案 2 :(得分:1)
after char* bin = calloc(9, sizeof(char));
下面的代码
for(int i=0;i<8;i++)
bin[i]='0';
因为你正在从右到左填充你的垃圾箱。但如果你不填充bin的0位置,则意味着bin凝视位置包含'\ 0'由calloc函数初始化