Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 任何从基到十进制的转换_C_String_Math - Fatal编程技术网

C 任何从基到十进制的转换

C 任何从基到十进制的转换,c,string,math,C,String,Math,我的头撞在这堵墙上已经很久了,我被迫写了我的第一篇StackOverflow帖子,我试图把一个代表任意基数的数字的字符串转换成10进制 int* baseToDec(int base, char* value){ //after three hours its time for a full restart :( give it up for hour 4!!! printf("%s has a length of %d\

我的头撞在这堵墙上已经很久了,我被迫写了我的第一篇StackOverflow帖子,我试图把一个代表任意基数的数字的字符串转换成10进制

int* baseToDec(int base, char* value){
  //after three hours its time for a full restart :( give it up for hour 4!!!                            
  printf("%s has a length of %d\n", value, (int)strlen(value));
  int* res = (int*)malloc(1 * sizeof(int));                                           
  int p = 1;
  for(int i = strlen(value)-1; i >= 0; --i){ // moving backwards through the list                        
    int digit; // there is something I dont understand going on with the 0                               
    printf("value at i:%d %c\n",i,  value[i]);
    if(value[i] >= 48 && value[i] <= 57){
      digit = value[i] - 48;


    }
    if(value[i] >= 65 && value[i] <= 90){
      digit = value[i] - 55;
    }
    printf("%d * %d\n",digit, p);

    *res += digit * p;
    p = p * base;
  }
  return res;

res
指向的缓冲区在未初始化的情况下使用。 通过
malloc()
分配的缓冲区的初始值是不确定的,使用不确定值将调用未定义的行为

您应该添加初始化并检查分配是否成功,如下所示:

  int* res = (int*)malloc(1 * sizeof(int));
  if (res == NULL) return NULL; /* check */
  *res = 0; /* initialization */

编辑问题,提供一个包含
main
例程和示例输入、观察到的输出和期望的输出的示例。首先,阅读以下内容:您根本不需要内存分配。只需声明函数以返回
int
,而不是指针。并将
res
声明为
int
。不应使用硬编码数字来表示字符常量。48应该是
'0'
,57是
'9'
,65是
'A'
,90是
'Z'
。奇怪的是
-55
,应该写为
-'A'+10
。奇怪输出的原因似乎不在函数
baseToDec
中,而是在该函数的调用者中。请发布一个。谢谢,但是当我用33(八进制41)运行代码时,我仍然得到这个output@MaxConway“此输出”是什么?``41在i:3处的长度为4值0*1在i:2处的长度为1*8在i:1处的长度为1*64在i:0处的长度为4*512 2120
  int* res = (int*)malloc(1 * sizeof(int));
  if (res == NULL) return NULL; /* check */
  *res = 0; /* initialization */