[英]Converting a decimal number to binary in C
我试图将十进制从[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;
}
现在我有几个问题:
malloc(0)
; 就我而言,它将不会从堆中分配任何内存。 那么,它如何/为什么起作用? *(str + count) = '\\0';
必要? 更新
为了进行此实验,我将atobin
函数atobin
一个.h
文件中。 这次它产生了一些问题。 现在,我添加我的最后一个问题:
malloc
参数应使用的最小整数是多少? 一些试错法让我猜测应该是512
。 任何想法?
如果size为零,则返回值取决于特定的库实现(它可以是空指针,也可以不是空指针),但是不得取消对返回的指针的引用。
它为您工作只是运气。 尝试一些随机的malloc并在之后释放它们,那么您很有可能(但不能保证)会崩溃。
这将以null结尾的字符串。 取决于您需要使用字符串的方式。 您的示例中的printf
需要它,因为这是它知道字符串何时结束的唯一方法。
抱歉,我没有时间仔细看。
malloc(0)
有效使用。 它返回的是实现定义的。 但是,如果通过malloc(0)
返回的指针访问对象会发生undefined behavoiur
。 您可以阅读此相关问题。
在C语言中,由于字符串是以\\0
结尾的字符数组,因此最好使用*(str + count) = '\\0';
设置字符串的最后一个字符的语句。 它可以在此代码中运行,但最好始终在代码中设置字符串的结尾。 如果将位设置为0,则可能会起作用,因为它与终止字符串相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.