将给定基数的数字转换为十进制

convert a number from the given base to decimal

这是我的代码,但它不起作用;

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 字符串的末尾而不是开始 - 所以你也必须修复它,并且修复你的内存泄漏....