Il titolo è abbastanza esplicativo: devo convertire una variabile long in un array di char, come faccio?
mi hanno consigliato di usare la funzione snprintf, ma nn ho trovato dei riferimenti su come usarla.
Il titolo è abbastanza esplicativo: devo convertire una variabile long in un array di char, come faccio?
mi hanno consigliato di usare la funzione snprintf, ma nn ho trovato dei riferimenti su come usarla.
Si usa come printf, aggiungendo la stringa destinazione come primo parametro.
Non ricordo di preciso, ma per stampare a schermo si usava qualcosa del tipo:
Per "stampare" su stringa usi:codice:printf ("%l", variabilelong);
codice:sprintf (variabilestringa, "%l", variabilelong);
Folle e' l'uomo che parla alla luna.
Stolto chi non le presta ascolto.
c'è la funzione ltoa(Long To Array) http://www.cplusplus.com/ref/cstdlib/ltoa.html
![]()
Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)
ti fornisco qualcosa di studio:
l'ho scritta per convertire int long unsigned e double in una stringa.codice:char *ToString(double num)//converte un intero o un double in una stringa { char *temp; temp = calloc(15, sizeof(char)); if (num == .0) return "0"; if (isDouble(num)) sprintf(temp, "%f", num); else sprintf(temp, "%d", (int)num); return temp; } int isDouble(double arg) { int exp, result; for (exp = 1; exp <= 6; exp++) { result = (int)pow(10, exp); if ((int)(arg * result) % 10) return 1;//errore } return 0; }
Ma la si deve un po' adeguare al caso specifico.
Ciao![]()
Nulla, ma e' sempre qualcosa.
Ok grazie a tutti, ho provato a scrivermi una funzione da me, si basa perlopiù sulla matematica. l unica differenza è che invece che un array di char converte in un arry di int(dove ogni elemento è una cifra da 0 a 9):
si richiama passando come primo argomento il puntatore al primo elemento di un array di int.codice:#include <math.h> void LngToArray(int *p,long n){ int E = 9, j = 0, i = 0; for (i=9;i>=0;--i){ j = (int)(n / pow(10,i)); *(p+i) = j; n = n - ((int)pow(10,i) * j); } }
Che ne pensate?
Ti consiglio di studiare le funzioni che ho fornito, come l'hai scritta tu violi l'accesso alla memoria.
Nulla, ma e' sempre qualcosa.
prova cosi.codice:#include <stdlib.h> void LngToArray(int p[], long n){ int j, i; long tmp = n, count = 0; while (tmp != 0){ tmp = tmp / 10; count++; } for (i= count - 1; n != 0; i--){ j = n - ( n / 10) * 10; p[i] = j; n = n / 10; } } main() { int p[10], i; long t = 3202; LngToArray(p, t); for(i = 0; i <= 3; i++) printf("%d ", p[i]); return 0; }
Nulla, ma e' sempre qualcosa.
scusa che vuol dire che violo l'accesso alla memoria ?!?!?!
ti riferisci al fatto che uso un puntatore al vettore e che il vettore in teoria può essere più piccolo del necessario?
beh è compito di chi usa la funzione assicurarsi che il puntatore punti a un vettore di almeno 10 elementi.
Peraltro visto che questa funzione l ho scritta per uso personale, di certo nn sarò cosi fesso da passare un vettore più piccolo.
![]()
Intendo che in fase di esecuzione accede alla memoria in maniera illegale e quindi viene bloccato dal sistema.
Cmq se ti piace cosi....
Pero le prime due funzioni che ho scritto sono interessanti.
Ti consiglio spassionatamente di osservarle e magari anche migliorarle.
Nulla, ma e' sempre qualcosa.
che intendi con "e quindi viene bloccato dal sistema" ?Originariamente inviato da maurizio2
![]()
Intendo che in fase di esecuzione accede alla memoria in maniera illegale e quindi viene bloccato dal sistema.
Cmq se ti piace cosi....
Pero le prime due funzioni che ho scritto sono interessanti.
Ti consiglio spassionatamente di osservarle e magari anche migliorarle.
la funzione l ho provata e funziona.