【发布时间】:2021-03-07 15:04:27
【问题描述】:
我正在编写一个接收数字(十进制、十六进制或八进制)并将其转换为二进制补码形式的 C 程序。
该算法应该是正确的,因为我以前在其他地方使用过它,但我对如何返回 0 和 1 的 int 数组感到困惑。
我的理解是我必须使用 malloc 为这个新数组分配内存空间,但我不知道如何在语法上这样做。
这是我目前所拥有的:
char *itob (int num, int size) {
int binary[size];
binary[size] = (int *)malloc(size);
for (int i=0; i<size; i++) {
binary[i] = 0;
}
int decimal = num;
int counter = 0;
if (decimal > -32768 && decimal < 32767) {
if (decimal < 0) {
decimal = 65536 + decimal;
}
while (decimal>0) {
binary[counter] = decimal%2;
decimal = decimal/2;
counter++;
}
}
return binary;
}
参数num是要转换的数字,size是我要打印的位数。
【问题讨论】:
-
1) 永远不要将 malloc 结果转换为 C。编译器会为您完成。这也可以帮助您正确处理:2) malloc 结果是一个指针,将其分配给指针变量:
int *binary = malloc(sizeof(int)*size);3) 使您返回的类型与您的binary变量类型相同。 -
我尝试了
int *binary = malloc(sizeof(int)*size);并收到错误variable-sized object may not be initialized? -
删除
int binary[size];这一行 -
嗯..我做到了
-
删除行'binary[size] = (int *)malloc(size);'。变量二进制有自动存储
标签: c malloc twos-complement