[英]Concatenating a char in a recursive function in C
尽管我对高级语言有更多的经验,但是在理解内存allocation
以及strings
在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));
}
非常感谢
更改:
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.