首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >itoa实现返回不完整的字符串

itoa实现返回不完整的字符串
EN

Stack Overflow用户
提问于 2018-06-06 04:19:22
回答 1查看 107关注 0票数 0

好了,我试图让我的itoa_base.c返回一个字符串,我在另一个函数中创建了一个字符串*str,并将一个指向该字符串的引用指针发送到执行转换的函数,但是当我试图打印它进行检查时,我只得到了字符串的最后一个字符,而不是整个字符串,并且我不知道为什么。此外,itoa_base的功能与itoa完全相同,但可以选择转换基数。

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

void    ft_itoa_base_sneaky(int value, int base, char *str)
{
    char *ref = "0123456789ABCDEF";

    if (value < base)
    {
         *str = ref[value];
         printf("%s", str);
         str++;
    }
    else if (value >= base)
    {
        printf("%d\n", value);
        ft_itoa_base_sneaky(value / base, base, str);
        ft_itoa_base_sneaky(value % base, base, str);
    }
}

char    *ft_itoa_base(int value, int base)
{
    char *str;
    char *tmp;

    str = malloc(sizeof(char) * 32);
    tmp = str;

    ft_itoa_base_sneaky(value, base, tmp);
    printf("\n%s", tmp);
    return (str);
}

int main (int ac, char **av)
{
    char *str;

    if (ac == 3)
        str = ft_itoa_base(atoi(av[1]), atoi(av[2]));
    printf("\n");
    printf("%s\n", str);
    return (0);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-06 04:43:49

ft_itoa_base_sneaky中,您递增str,但之后不对其执行任何操作。由于str是一个局部变量,因此对它的更改不会反映在调用函数中。双重递归也是不必要的。

由于递归以相反的顺序处理数字,因此让基本情况(处理最高有效的数字)将索引0写入字符串,并更改函数以返回它处理的索引。然后,在递归的情况下,写入返回的索引加1。

代码语言:javascript
复制
int ft_itoa_base_sneaky(int value, int base, char *str)
{
    char *ref = "0123456789ABCDEF";

    if (value < 0) {
        int idx = ft_itoa_base_sneaky((-value) / base, base, str) + 1;
        str[idx] = '-';
        return idx;
    } else if (value < base) {
        str[0] = ref[value];
        return 0;
    } else {
        int idx = ft_itoa_base_sneaky(value / base, base, str) + 1;
        str[idx] = ref[value%base];
        return idx;
    }
}

然后,调用函数可以使用此索引来设置空终止符:

代码语言:javascript
复制
int idx = ft_itoa_base_sneaky(value, base, tmp) + 1;
tmp[idx] = 0;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50708320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档