【发布时间】:2019-11-16 11:29:05
【问题描述】:
我正在用 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 结束
【问题讨论】:
-
return '0'返回的是char,而不是char*。你应该得到一个编译器警告。 -
我不明白你期望它如何工作。看起来您正在尝试使用
+进行字符串连接,但这不是您在 C 中的操作方式。 -
return convertToBaseOut(num/base, base) + (num % base);正在获取一个指针,为其添加偏移量,然后返回调整后的指针。换句话说,它根本不会像您希望它做的那样做任何事情。 -
这看起来就像您使用了一个 Python 程序并简单地将其转换为 C 语法,而没有了解这两种语言之间的差异,尤其是关于它们如何处理字符串的差异。
-
提示:当函数到达基本情况时,它应该为字符串
malloc内存,然后每个级别的递归都需要将其数字附加到字符串。每个级别的递归,包括基本情况,都应该返回malloc返回的指针。
标签: c recursion segmentation-fault tail-recursion c89