C 任何从基到十进制的转换
我的头撞在这堵墙上已经很久了,我被迫写了我的第一篇StackOverflow帖子,我试图把一个代表任意基数的数字的字符串转换成10进制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\
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 */