gpt4 book ai didi

c - 尾递归函数中的段错误?

转载 作者:太空宇宙 更新时间:2023-11-04 06:46:47 26 4
gpt4 key购买 nike

我正在用 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

最佳答案

在 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;
}

它也重新计算字符串的长度。

关于c - 尾递归函数中的段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56909674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com