在C中的递归函数中连接char

时间:2014-10-25 04:03:06

标签: c recursion char strcpy strcat

尽管我对更高级别的语言有更多的经验,但我很难理解内存allocationstrings如何在C中真正起作用。

我正在尝试实现一个非常简单的基本转换器,它可以递归工作。唯一的问题是它应该返回char*而不是int

这是我的代码。我已经测试了递归调用,如果我使用整数,它可以工作。所以,问题肯定在于字符串部分。它给了我一个无限循环。

char* baseConversion(int num, int baseIn, int baseOut){

    //convert num to base ten

    int quotient = num / baseOut;

    int remainder = num % baseOut;

    char rem = (char)(((int)'0') + remainder);

    char *result = malloc(strlen(output) + 1);

    strcpy(result, rem);

    if (quotient == 0)
        return result;
    else
        return strcat(result, baseConversion(quotient, baseIn, baseOut));
}

非常感谢

2 个答案:

答案 0 :(得分:1)

变化:

strcpy(result, rem);

为:

result[0] = rem;
result[1] = 0;

这将创建一个包含rem中的字符的单字符字符串。

您可能还需要修复:

malloc(strlen(output)+1)

因为你的函数中没有名为output的变量。

答案 1 :(得分:0)

如果我已正确理解您所说的内容,那么您需要的是以下内容

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char * baseConversion( unsigned int x, unsigned int base )
{
    unsigned int digit;
    char *p = NULL;
    size_t n = 2;

    if ( base > 10 || base < 2 ) base = 10;

    digit = x % base;

    if ( x / base ) p = baseConversion( x / base, base );

    if ( p ) n += strlen( p );

    p = realloc( p, n );

    *( p + n  - 2 ) = digit + '0';
    *( p + n  - 1 ) = '\0';

    return p;
}   


int main(void) 
{
    unsigned int x = 255;

    char *p = baseConversion( x, 10 );

    printf( "%s\n", p );

    free( p );

    p = baseConversion( x, 8 );

    printf( "%s\n", p );

    free( p );

    p = baseConversion( x, 2 );

    printf( "%s\n", p );

    free( p );

    return 0;
}

输出

255
377
11111111

P.S。当一个答案被标记为最佳,但代码将从其他答案中使用时,这很有趣。:)