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