【发布时间】:2022-01-01 05:43:33
【问题描述】:
我编写了一个程序,将 unsigned int 转换为二进制。在我的函数中,我使用 malloc() 函数。我想知道是否有办法在没有 malloc() 的情况下做到这一点。
#include <stdio.h>
#include <stdlib.h>
char *toBinary(unsigned n);
int main(void) {
int n;
printf("Enter an integer to convert: ");
scanf("%d",&n);
char* binary = toBinary(n);
printf("%s",binary);
return 0;
}
char* toBinary(unsigned n) {
char* binary = (char*)malloc(sizeof(char) * 16);
int j = 0;
unsigned i;
for (i = 1 << 16; i > 0; i = i / 2) {
if(j == 8)
binary[j++] = ' ';
else
binary[j++] = (n & i) ? '1' : '0';
}
binary[j]='\0';
return binary;
}
~
【问题讨论】:
-
是的,有一种方法,在
main中声明binary数组,例如:char binary[33](33,因为您可能需要 32 字节 + 加上一个空终止符),然后传递binary作为toBinary的第二个参数。 -
代码中没有提到
short,尽管硬编码的16可能是对sizeof(short)的引用。有趣的是,sizeof(char)与1相同,并且毫无意义——因此您既过度使用又未充分使用sizeof运算符。此外,您没有分配足够的空间;您需要在内存分配中添加一个字节以允许空字节 - 或您在输出中添加的空间。 -
旁注:如果您已经使用
i = 1 << 16进行初始化,我真的更喜欢在后循环操作中使用i >>= 1,尽管两者是等价的。 -
哦,你
malloc'ed 数组太短了两个,因为你在中间添加一个空格并以空值结尾字符串!
标签: c type-conversion bit unsigned-integer