gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:51:19 25 4
gpt4 key购买 nike

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

#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);
}

最佳答案

ft_itoa_base_sneaky 中,您递增 str 但之后您不对它做任何事情。由于 str 是一个局部变量,对其的更改不会反射(reflect)在调用函数中。双重递归也不是必需的。

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

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

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

int idx = ft_itoa_base_sneaky(value, base, tmp) + 1;
tmp[idx] = 0;

关于c - itoa 实现返回不完整的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50708320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com