gpt4 book ai didi

在C中将十进制数转换为二进制数

转载 作者:太空宇宙 更新时间:2023-11-04 01:30:36 26 4
gpt4 key购买 nike

我试图将小数从 [0, 255] 转换为 8 位二进制数,其中每一位将由逗号和空格分隔。我尝试了以下方法(最终成功了,除了最后一位不需要任何分隔符):

#include <stdio.h>
#include <stdlib.h>

char* atobin(int input) {
char *str = malloc(0);
int index, count = 0;
if (input > 255| input < 0) {
printf ("Input out of range. Abort.\n");
exit(EXIT_FAILURE);
}

for (index = 7; index >= 0; index--) {
*(str + (count++)) = (input >> index & 1) ? '1' : '0';
*(str + (count++)) = ',';
*(str + (count++)) = ' ';
}
*(str + count) = '\0';
return str;
}

int main(int argc, char *argv[]) {
printf("%s\n", atobin(atoi(argv[1])));
return EXIT_SUCCESS;
}

现在我有几个问题:

  1. 我使用了malloc(0);就我而言,它将不从堆中分配内存。那么,它是如何/为什么起作用的?
  2. 是否需要声明 *(str + count) = '\0';
  3. 有什么办法可以优化这段代码吗?

更新

为了进行这个实验,我将atobin 函数放入了.h 文件中。这次它产生了一些问题。现在我添加我的最后一个问题:

用于malloc 参数的最小整数应该是多少?一些反复试验的方法让我猜测它应该是 512。有什么想法吗?

最佳答案

  1. 来自 malloc 文档:

If size is zero, the return value depends on the particular library implementation (it may or may not be a null pointer), but the returned pointer shall not be dereferenced.

它对您有用纯属运气。之后尝试一些随机的 malloc 和 free,你很可能会崩溃——但不能保证——你会崩溃。

  1. 此字符串以 null 结尾。如果需要,取决于您希望如何使用该字符串。您示例中的 printf 需要它,因为这是它知道字符串何时结束的唯一方法。

  2. 不好意思,没时间细看

关于在C中将十进制数转换为二进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23140794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com