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:
codice:
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;
}
Questa funzione lavora bene; i è il valore da rappresentare e una volta uscita la
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ì:
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;
}
Di seguito ecco come uso la chiamata alla funzione:
codice:
int nChars = 0;
int iVal = 18954;
char pStr[21];
nChars = IntToStr(iVal, pStr);
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?
Ringrazio per l'attenzione