Conversione strana da int ad unsigned, conversione intero a stringa e strano errore di segmentazione

di
Anonimizzato21762
il
7 risposte

Conversione strana da int ad unsigned, conversione intero a stringa e strano errore di segmentazione

Salva e tutti! Sviluppando un piccolo programmino mi sono reso conto che quando converto un int in un unsigned il tutto scoppia, infatti quando do valore maggiori di 10 inizia a restituire valore strani. Per esempio scrivendo

...
int variabile=42;
...
printf("%d %x", variabile,  (unsigned)variabile);
...
stampa
42 2a
Qualcuno saprebbe darmi delucidazioni in merito?

Inoltre mi interesserebbe sapere come convertire un intero in una stringa, se magari esiste qualche funzione che fa ciò. Per esempio:

...
int n=354;
char s[4];
...
s=convert(n);
printf("%s",s);
...
e stampa
"354"
Qualcuno sa aiutarmi in questo?

EDIT:

Ultimo quesito a cui non riesco a trovare risposta. In sostanza ho fatto un metodo dove alla fine mi ritrovo un array dove ci sono tutti i valori che mi interessano, e vorrei mettere questi valori all'interno di un tipo che ho definito io che prende 4 unsigned int. il codice è questo:

...
obstacle_t * ostacolo;
int obs[4]
...
ostacolo->s_i=(unsigned)obs[3];
 ostacolo->s_j=(unsigned)obs[2];
 ostacolo->d_i=(unsigned)obs[1];
 ostacolo->d_j=(unsigned)obs[0]; 
...
Però per determinati valori di "obs" mi lancia un errore di segmentazione che non mi riesco a spiegare (se tolgo la parte dell'assegnamento al mio tipo dei valori fila tutto liscio). RIngrazio infinitamente chiunque voglia aiutarmi!

7 Risposte

  • Re: Conversione strana da int ad unsigned, conversione intero a stringa e strano errore di segmentazione

    Rispondo al secondo quesito: per convertire un intero in stringa
    si puo' usare la funzione sprintf().
    
    # include <stdio.h>
    
    int main(void)
    {
        // stringa contenente il numero convertito; 
        // con un int di 4 byte bisogna prevedere il numero 
        // di cifre massimo possibile (10), piu' l'eventuale segno, 
        // piu' il byte di fine stringa; 
        // un int a 4 byte puo' assumere valori interi da -2147483648 
        // a +2147483647
        char s[12];
        int num;
    
        printf("\n\n%s", "Digita numero int: ");
        scanf("%d", &num);
        sprintf(s, "%d", num);
        printf("\n%s%s\n\n", "Numero convertito in stringa: ", s);
        return 0;
    }
    
  • Re: Conversione strana da int ad unsigned, conversione intero a stringa e strano errore di segmentazione

    Korr ha scritto:


    Rispondo al secondo quesito: per convertire un intero in stringa
    si puo' usare la funzione sprintf().
    
    # include <stdio.h>
    
    int main(void)
    {
        // stringa contenente il numero convertito; 
        // con un int di 4 byte bisogna prevedere il numero 
        // di cifre massimo possibile (10), piu' l'eventuale segno, 
        // piu' il byte di fine stringa; 
        // un int a 4 byte puo' assumere valori interi da -2147483648 
        // a +2147483647
        char s[12];
        int num;
    
        printf("\n\n%s", "Digita numero int: ");
        scanf("%d", &num);
        sprintf(s, "%d", num);
        printf("\n%s%s\n\n", "Numero convertito in stringa: ", s);
        return 0;
    }
    
    Grazie mille, mi sarà infinitamente utile!

    (ho aggiunto un'altra domanda per chi volesse aiutarmi)
  • Re: Conversione strana da int ad unsigned, conversione intero a stringa e strano errore di segmentazione

    42 2a

    mi sembrano valori corretti. Cosa non va?

    Per l'altro quesito ti consiglio di creare un thread apposito e non cambiare il post iniziale perché si fa solo confusione.
    In ogni caso sembra che usi il puntatore ostacolo senza averlo allocato. Se non è cosi mostra più codice in un altro thread.
  • Re: Conversione strana da int ad unsigned, conversione intero a stringa e strano errore di segmentazione

    oregon ha scritto:


    42 2a

    mi sembrano valori corretti. Cosa non va?

    Per l'altro quesito ti consiglio di creare un thread apposito e non cambiare il post iniziale perché si fa solo confusione.
    In ogni caso sembra che usi il puntatore ostacolo senza averlo allocato. Se non è cosi mostra più codice in un altro thread.
    In che senso valori corretti, a me interessa che restituisca 42 pure come unsigned

    Ok per il nuovo thread, faccio subito!
  • Re: Conversione strana da int ad unsigned, conversione intero a stringa e strano errore di segmentazione

    Sora Keyblade ha scritto:


    oregon ha scritto:


    In che senso valori corretti, a me interessa che restituisca 42 pure come unsigned
    Tu nella printf hai indicato

    %x

    sai cosa vuol dire?
  • Re: Conversione strana da int ad unsigned, conversione intero a stringa e strano errore di segmentazione

    oregon ha scritto:


    Sora Keyblade ha scritto:


    oregon ha scritto:


    In che senso valori corretti, a me interessa che restituisca 42 pure come unsigned
    Tu nella printf hai indicato

    %x

    sai cosa vuol dire?
    Non mi dire che li converte in esadecimale...

    Dovrò sistemare meglio gli appunti

    Comunque per l'altra domanda ho risolto, mi incasinavo solo con gli indici
  • Re: Conversione strana da int ad unsigned, conversione intero a stringa e strano errore di segmentazione

    Dovrai anche fare attenzione a ciò che scrivi
Devi accedere o registrarti per scrivere nel forum
7 risposte