我的代码中遇到了分段错误的问题。我正在尝试创建一个将十进制数转换为十六进制数的函数。 另外,如果我使用:15& 15将是1111或15?
这是我的代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *to_hex(int n);
main(){
int dec;
printf("-> ");
scanf("%d",dec);
printf(to_hex(dec));
}
char *to_hex(int n){
char *array = malloc(sizeof(int)*2+8);/*makes array*/
int i;
int index=0;/*used for storing into array*/
for(i=28;i>-1;i=i-4){/*mask and compare 8 times*/
int shift=n>>i;/*right shift*/
int mask=shift&15;/*masks*/
if (mask<10){
*(array+index)=(char)mask;
index++;
}
else{
switch(mask){
case 10:
*(array+index)='a';
index++;
break;
case 11:
*(array+index)='b';
index++;
break;
case 12:
*(array+index)='c';
index++;
break;
case 13:
*(array+index)='d';
index++;
break;
case 14:
*(array+index)='e';
index++;
break;
case 15:
*(array+index)='f';
index++;
break;
}
}
}
*(array+index)='\0';
return array;
}
我认为:int mask:等于15而不是1111 am我是否正确?感谢
答案 0 :(得分:0)
您可以通过将scanf("%d",dec);
更改为scanf("%d",&dec);
来避免段错误,如果您想要打印可打印的结果,请将*(array+index)=(char)mask;
更改为*(array+index)=(char)mask+'0';
(或更好,{{1} }}
array[index] = mask + '0';
也有点不确定。请改用printf(to_hex(dec));
;它更安全。