簡體   English   中英

在 C 中爭論; gdb 沒有顯示錯誤,function 沒有給出 output

[英]inteager to argument in C; gdb shows no errors, function is not giving output

** 你好:)

所以我有這個任務來編寫一個程序,該程序將使用 malloc 將 int 轉換為 arg 並且一切正常,gdb 沒有顯示錯誤,但它沒有以這種形式打印任何 Z78E6221F6393D1356681DB398F14CED6。 如果我刪除 itoa_buffer[i] = '\0'; 有時它會顯示 output 有時不會。 我不知道這里出了什么問題,似乎還不錯。

我不知道在哪里尋求幫助,因為我喜歡按照我的邏輯在這里找到錯誤,而不是從互聯網上復制解決方案。 我會欣賞一些提示,它可能是一些我不知道的小事情,不會讓我進一步了解 go。**

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

暫無
暫無

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

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