我正在用C编写一个将数字转换为八进制,二进制,十六进制等不同基数的函数。我们需要递归地编写它,并且该函数必须返回char *。但是,我在此代码段上遇到了分段错误错误。我也不确定转换是否正常工作,因为我无法克服此错误。我是C语言的新手,所以如果我显然缺少任何东西,我深表歉意。
#include <stdio.h>
char *convertToBaseOut(short int num, int base);
int main()
{
printf("%s", convertToBaseOut(256, 8));
return 0;
}
char *convertToBaseOut(short int num, int base) {
if (num == 0) {
return '0';
}
return convertToBaseOut(num/base, base) + (num % base);
}
分段错误
...程序退出代码为139
答案 0 :(得分:2)
在C语言中,不能使用+连接字符串。
这里您具有简单的递归功能:
size_t tostring(char *str, unsigned num, unsigned base)
{
static const char digits[] = "0123456789ABCDEF";
size_t pos;
if(!num)
{
return 0;
}
else
{
pos = tostring(str, num / base, base);
str[pos++] = digits[num % base];
str[pos] = 0;
}
return pos;
}
int main()
{
char str[20];
printf("%u\n" , tostring(str,0xabcd, 2));
printf("%s\n", str);
return 0;
}
它也恢复字符串的长度。