Altro problema con stringhe

di il
3 risposte

Altro problema con stringhe

Vi lascio tutto il codice perchè non so bene in che punto si trovi il problema

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <string.h>

void Dec2Bin(char string[], int parteint)
{
        int n=parteint, i=0, j;
        char temp[99];
        while(n!=0)
        {
            temp[i]=(n%2)+'0';
            n/=2;
            i++;
        }
        temp[i]='\0';
        int lung=strlen(temp);
        for(i=0, j=lung-1;i<lung;i++, j--)
            string[j]=temp[i];
        string[i]='\0';
}
void Dec2Mant(char string[], float partedec)
{
    float n=partedec;
    int i;
    for(i=0;i<23;i++)
    {
        n*=2;
        if(n<1)
            string[i]='0';
        else
        {
            string[i]='1';
            n-=1;
        }
    }
    string[i]='\0';
}

int main()
{
    char numero[32], esp[99], temp[99], ieee754[99], mantissa[23];
    int scelta, parteint, j, i, pos;
    float partedec;
    printf("Scegli il metodo di conversione:\n1) Da decimale a floating point a 32 bit\n2) Da floating point a 32 bit a decimale\n");
    scanf("%d", &scelta);
    while(scelta!=1 && scelta!=2)
    {
        printf("Errore, premi un qualcunque tasto per riprovare\n");
        getch();
        system("cls");
        printf("Scegli il metodo di conversione:\n1) Da decimale a floating point a 32 bit\n2) Da floating point a 32 bit a decimale\n");
        fflush(stdin);
        scanf("%d", &scelta);
    }
    if(scelta==1)
    {
        printf("Inserisci il numero decimale con la virgola [,/.]\n");
        fflush(stdin);
        gets(numero);
        parteint=atoi(numero);
        if(parteint>0)
            strcat(ieee754,"0");
        else
        {
            if(numero[0]=='-')
            {
                strcat(ieee754,"1");
                parteint*=-1;
            }
            else
               strcat(ieee754,"0");
        }
        for(i=0;numero[i]!='.' && numero[i]!=',';i++)
            numero[i]='0';
        partedec=atof(numero);
        Dec2Bin(esp, parteint);
        if(atoi(esp)!=0)
        {
            pos=strlen(esp)-1;
            for(i=0;i<pos;i++)
                temp[i]=esp[i+1];
            temp[i]='\0';
            Dec2Bin(esp,127+pos);
            strcat(ieee754,esp);
            printf("%s\n", esp);
            Dec2Mant(mantissa, partedec);
            printf("%s\n", mantissa);
            //strcat(ieee754, mantissa);
            printf("%s\n", ieee754);
        }


    }
    else
    {

    }
    return 0;
}
l'ultimo else è vuoto perchè ci devo ancora lavorare

Comunque il problema è che se stampo la stringa ieee754 prima di richiamare Dec2Mant me la stampa invece se la stampo dopo averla richiamata mi stampa uno spazio vuoto anche se la funzione Dec2Mant non tocca in alcun modo ieee754 e un altro problema si presenta se provo a fare strcat(ieee754,mantissa) che mi fa crashare il programma

3 Risposte

  • Re: Altro problema con stringhe

    Nello specifico, perché la strcat non abbia problemi la stringa destinazione deve avere un terminatore anche la prima volta, quindi

    ieee754[99] = { 0 }

    e per il problema di corruzione dello stack, ricorda che la mantissa è di 23 elementi più il terminatore quindi

    mantissa[24]

    Per riepilogare
    
    char numero[32], esp[99], temp[99], ieee754[99] = {0}, mantissa[24];
    
  • Re: Altro problema con stringhe

    oregon ha scritto:


    Nello specifico, perché la strcat non abbia problemi la stringa destinazione deve avere un terminatore anche la prima volta, quindi

    ieee754[99] = { 0 }

    e per il problema di corruzione dello stack, ricorda che la mantissa è di 23 elementi più il terminatore quindi

    mantissa[24]

    Per riepilogare
    
    char numero[32], esp[99], temp[99], ieee754[99] = {0}, mantissa[24];
    
    oh grazie, per la mantissa non so perchè abbia sbagliato e non abbia preso in considerazione il fatto di lasciare uno spazio in più per il terminatore invece la cosa del fatto che strcat deve avere un terminatore anche la prima volta non la sapevo. Comunque grazie
  • Re: Altro problema con stringhe

    La strcat aggiunge una stringa ad un'altra a partire dal terminatore della seconda. Come fa se non c'è il terminatore?

    Hai studiato come lavora la strcat da qualche libro, guida o altro? Sicuramente c'è scritto... mai scrivere codice senza sapere cosa si fa.
Devi accedere o registrarti per scrivere nel forum
3 risposte