簡體   English   中英

在C的遞歸函數中連接char

[英]Concatenating a char in a recursive function in C

盡管我對高級語言有更多的經驗,但是在理解內存allocation以及stringsC實際工作方式方面還是有很多麻煩。

我正在嘗試實現一個非常簡單的遞歸工作的基本轉換器。 唯一的事情是它應該返回一個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));
}

非常感謝

更改:

strcpy(result, rem);

至:

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

這將創建一個包含rem字符的單字符字符串。

您可能還需要修復:

malloc(strlen(output)+1)

因為您的函數中沒有名為output的變量。

如果我已正確理解您在說什么,那么您需要的是以下內容

#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

PS將一個答案標記為最佳答案是很有趣的,但是其他答案將使用該代碼。:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM