C语言中十进制数到二进制数的转换
我试图将十进制数从C语言中十进制数到二进制数的转换,c,malloc,C,Malloc,我试图将十进制数从[0255]转换为8位二进制数,其中每个位用逗号和空格分隔。我尝试了以下方法(最终成功了,除了最后一位不需要任何分隔符): #包括 #包括 char*atobin(int输入){ char*str=malloc(0); 整数索引,计数=0; 如果(输入>255 |输入=0;索引--){ *(str+(count++)=(输入>>索引和1)?“1”:“0”; *(str+(count++)=','; *(str+(count+)=''; } *(str+count)='\0';
[0255]
转换为8
位二进制数,其中每个位用逗号和空格分隔。我尝试了以下方法(最终成功了,除了最后一位不需要任何分隔符):
#包括
#包括
char*atobin(int输入){
char*str=malloc(0);
整数索引,计数=0;
如果(输入>255 |输入<0){
printf(“输入超出范围。中止。\n”);
退出(退出失败);
}
对于(索引=7;索引>=0;索引--){
*(str+(count++)=(输入>>索引和1)?“1”:“0”;
*(str+(count++)=',';
*(str+(count+)='';
}
*(str+count)='\0';
返回str;
}
int main(int argc,char*argv[]){
printf(“%s\n”,atobin(atoi(argv[1]));
返回退出成功;
}
现在我有几个问题:
malloc(0)
;就我而言,它会的
不从堆中分配内存。那么,它是如何/为什么工作的*(str+count)='\0'代码>必要吗
atobin
函数放入.h
文件中。这一次会产生一些问题。
现在我补充最后一个问题:
用于malloc
参数的最小整数应该是多少?一些反复试验的方法让我猜它应该是我的512
。有什么想法吗
它对你有用只是运气。尝试一些随机的malloc,然后免费,你很有可能——但不能保证——你会崩溃
printf
需要它,因为这是它知道字符串何时结束的唯一方法它对你有用只是运气。尝试一些随机的malloc,然后免费,你很有可能——但不能保证——你会崩溃
printf
需要它,因为这是它知道字符串何时结束的唯一方法malloc(0)
有效。它返回的是实现定义的。但是,如果通过malloc(0)返回的指针访问对象,会发生什么情况呢。您可以阅读相关问题。在C语言中,由于字符串是以
\0
结尾的字符数组,因此最好使用*(str+count)='\0'代码>语句设置字符串的最后一个字符。它在这段代码中工作,但最好总是在代码中设置字符串的结尾。如果位设置为0,它可能会工作,因为它与终止字符串相同。malloc(0)
可以有效使用。它返回的是实现定义的。但是,如果通过malloc(0)
返回的指针访问对象,会发生什么情况呢。您可以阅读相关问题。在C语言中,由于字符串是以
\0
结尾的字符数组,因此最好使用*(str+count)='\0'代码>语句设置字符串的最后一个字符。它在这段代码中工作,但最好总是在代码中设置字符串的结尾。如果位设置为0,它可能会起作用,因为它与终止字符串相同。您知道C/C++中的“未定义行为”概念吗?@GrijeshChauhan No.:-(请参见str=malloc(0)
通过执行*(str+(count++)几乎与str=NULL
)=',';
您正在访问/分配非法内存指令的内存。根据C标准,代码的行为是未定义的。这意味着您可能在不同的执行实例中出现意外行为。确定。这取决于您需要的内存量。一个字符可以有1个字节,也可以根据需要有更多。例如如果你不使用,
的内部优化思想,你的程序可能有24个字节:静态字符str[]=“0,0,0,0,0,0”;
然后只需设置str[0]
,str[3]
,…你知道C/C++中的“未定义行为”概念吗?@grijeshchauchan No.:-(参见str=malloc(0)
通过执行*(str+(count++))几乎与str=NULL
相同=',';
您正在访问/分配非法内存指令的内存。根据C标准,代码的行为是未定义的。这意味着您可能在不同的执行实例中出现意外行为。确定。这取决于您需要的内存量。一个字符可以有1个字节,也可以根据需要有更多。例如如果你不使用,
的内部优化思想,你的程序可能有24个字节:静态字符str[]=“0,0,0,0,0,0,0”;
然后只需设置str[0]
,str[3]
,…“它对你有用只是运气而已。”-->“不幸的”因为它让OP觉得这是一个正确的代码。“它对您有效只是运气。”-->“不幸”是因为它给OP留下了这样一个印象,即这是一个正确的代码。
#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;
}