将给定基数的数字转换为十进制
convert a number from the given base to decimal
- 参数:number -- 你要转换成字符串的数字
- base -- 您将数字转换为的基数
- Return: 基数为字符串的数字"base"
- Return 类型:字符 *
这是我的代码,但它不起作用;
char *toBase(int number, int base) {
char *result=malloc(80);
char *ans=malloc(80);
int i=0,j,c;
while(number != 0) {
result[i] = number % base;
number = number / base; ++i;
}
for(j=i-1;j>=0;j--) {
if(result[j]>=10 && result[j]<=24) {
printf("%c",(result[j]+55));
*ans++=(result[j]+55);
} else {
printf("%d",(result[j]));
*ans++=(result[j]);
}
}
return ans;
}
问题是你在循环中修改了ans
指针,所以当你returnans
它不再指向字符串的开头,而是指向你应该在哪里终止字符串。
使用初始化为与 ans
和 return 相同的临时变量,您不修改该变量。
还应注意,您存在内存泄漏,您为 result
分配了内存,但您从未 free
它在任何地方。
您的问题在于将数字转换为文本
尝试将'0'和'A'的值分别相加,如
if(result[j]>=10 && result[j]<=24) {
printf("%c",(result[j]+'A'));
*ans++=(result[j]+'A');
} else {
printf("%c",(result[j]+'0'));
*ans++=(result[j]+'0');
}
并确保在 return 之前以空终止字符串,例如
*ans++ = 0;
还有 -- 声明
return ans;
将 return 字符串的末尾而不是开始 - 所以你也必须修复它,并且修复你的内存泄漏....
- 参数:number -- 你要转换成字符串的数字
- base -- 您将数字转换为的基数
- Return: 基数为字符串的数字"base"
- Return 类型:字符 *
这是我的代码,但它不起作用;
char *toBase(int number, int base) {
char *result=malloc(80);
char *ans=malloc(80);
int i=0,j,c;
while(number != 0) {
result[i] = number % base;
number = number / base; ++i;
}
for(j=i-1;j>=0;j--) {
if(result[j]>=10 && result[j]<=24) {
printf("%c",(result[j]+55));
*ans++=(result[j]+55);
} else {
printf("%d",(result[j]));
*ans++=(result[j]);
}
}
return ans;
}
问题是你在循环中修改了ans
指针,所以当你returnans
它不再指向字符串的开头,而是指向你应该在哪里终止字符串。
使用初始化为与 ans
和 return 相同的临时变量,您不修改该变量。
还应注意,您存在内存泄漏,您为 result
分配了内存,但您从未 free
它在任何地方。
您的问题在于将数字转换为文本
尝试将'0'和'A'的值分别相加,如
if(result[j]>=10 && result[j]<=24) {
printf("%c",(result[j]+'A'));
*ans++=(result[j]+'A');
} else {
printf("%c",(result[j]+'0'));
*ans++=(result[j]+'0');
}
并确保在 return 之前以空终止字符串,例如
*ans++ = 0;
还有 -- 声明
return ans;
将 return 字符串的末尾而不是开始 - 所以你也必须修复它,并且修复你的内存泄漏....