Carissimi ho un problemino che non riesco a superare. Ho una funzione che mi converte
un valore intero nella sua rappresentazione ASCII. La funzione è questa:
Questa funzione lavora bene; i è il valore da rappresentare e una volta uscita lacodice:char * UInt32ToStr(int i) { static char buf[10]; char *p = buf + 10; // Posiziono in fondo alla stringa sul terminatore null. do { *--p = '0' + (i % 10); i /= 10; } while (i != 0); return p; }
funzione p contiene l'indirizzo della stringa che ha ricevuto i caratteri corrispondenti.
Tuttavia com'è scritta sopra lo spazio per la stringa è allocato staticamente all'interno della funzione. Ora io vorrei fare in modo di poter allocare questo spazio esternamente, prima di invocare la funzione, dunque ho scritto così:
Di seguito ecco come uso la chiamata alla funzione:codice:int UInt32ToStr(int i, char *p) { int n = 0; // Contatore di caratteri in scrittura. while(*p++); // Posiziono in fondo alla stringa sul terminatore null. do { *--p = '0' + (i % 10); n++; i /= 10; } while (i != 0); // Qui all'uscita del ciclo p mi fornisce la stringa corretta. return n; }
A questo punto però il puntatore pStr non ha copiato lo stesso indirizzo del corrispettivo puntatore all'interno del corpo della funzione, dunque l'esito è un fallimento. Qualcosa mi sfugge, come potrei fare?codice:int nChars = 0; int iVal = 18954; char pStr[21]; nChars = IntToStr(iVal, pStr);
Ringrazio per l'attenzione

Rispondi quotando

