微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

整数到 C 中的参数; gdb 没有显示错误,函数没有给出输出

如何解决整数到 C 中的参数; gdb 没有显示错误,函数没有给出输出

** 你好:)

所以我的任务是编写一个程序,该程序将使用 malloc 将 int 转换为 arg 并且一切正常,gdb 没有显示错误,但它没有以这种形式打印任何输出。如果我删除 itoa_buffer[i] = '\0';有时它显示输出有时不显示。我不知道这里有什么问题,看起来不错。

我不知道从哪里寻求帮助,因为我喜欢遵循我的逻辑并在这里查找错误,而不是从互联网上复制解决方案。我会感谢一些提示,这可能是一些我不知道的小事,不会让我走得更远。**

#include<stdio.h>
#include "libft.h"

char    *ft_itoa(int n)
{
    int i;
    int z;
    char x;
    char *itoa_buffer;

    if (n == INT_MIN)
        return(ft_strdup("-2147483648"));
    if (n < 0)
    {
        n = -n;
        z = n;
        i = 1;
    }
    else
    {
        z = n;  
        i = 0;
    }
    while(z > 0)
    {
        z = z/10;
        i++;
    }   
    if(!(itoa_buffer = (char *)malloc((i+1)*sizeof(char))))
        return(0);
    i = i + 1;
    while(--i)
    {   
        x = (n%10 + '0');
        itoa_buffer[i] = x;
        n = n/10;
        if(n == 0 && i == 2)
        {
            i--;
            itoa_buffer[i] = '-';
            i--;
            break;
        }
    }
    itoa_buffer[i] = '\0'; // it stopped showing answers when i tried to add this symbol at the end.
    return(itoa_buffer);
}

int main()
{
    int n;
    
    n = 1980;
    printf("%s",ft_itoa(n));
}

解决方法

您将 '\0' 作为字符串的第一个字符。

你应该把它作为最后一个字符。

代替这部分

    i = i + 1;
    while(--i)
    {   
        x = (n%10 + '0');
        itoa_buffer[i] = x;
        n = n/10;
        if(n == 0 && i == 2)
        {
            i--;
            itoa_buffer[i] = '-';
            i--;
            break;
        }
    }
    itoa_buffer[i] = '\0';

你应该这样做

    itoa_buffer[i] = '\0';
    while(i--)
    {   
        x = (n%10 + '0');
        itoa_buffer[i] = x;
        n = n/10;
        if(n == 0 && i == 1)
        {
            i--;
            itoa_buffer[i] = '-';
            break;
        }
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。