尾递归函数中的分段错误错误?

萨米娜

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

P__J支持波兰的妇女

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

它也会重新调整字符串的长度。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章