Potresti passare l'array come parametro, oppure dichiarare l'array come
static, così non viene allocato sullo stack e continua ad esistere anche una volta usciti dalla funzione.
Il secondo modo fa storcere un po' il naso, parché da fuori accederesti a un dato in un certo senso "privato" della funzione. Però è un sistema che funziona e viene usato anche in programmi "seri", sia per comodità (non doversi allocare un array e passare il puntatore ogni volta che si chiama la funzione), sia per cautelarsi contro l'eventualità che l'array passato abbia una dimensione insufficiente, sia per far assomigliare la chiamata a quella di linguaggi tipo Java (dove ci pensa la funzione ad allocarti una stringa e te la restituisce, poi tu non devi preoccuparti di ritornare la memoria perché ci pensa automaticamente il garbage collector).
Se la frase precedente ti sembra arabo salta pure per il momento e andiamo avanti.
Nel tuo codice vedo qualche altro problema:
1) "numero" è dichiarato come char. E se fosse negativo? Cambierei la dichiarazione a "unsigned char" così siamo sicuri che è sempre positivo;
2) presumo che vorrai utilizzare l'array di char come una stringa. In tal caso devi mettere alla fine il carattere di terminazione '\0' e prevedere anche lo spazio per contenerlo (aggiungere 1 alla dimensione dell'array);
3) sarebbe meglio definire la lunghezza della stringa in una costante (#define LUNGHEZZA 3) e poi usare sempre la costante in tutti i posti in cui ti serve;
4) il numero 48 (codice ASCII del carattere '0') sta proprio male. Il poveraccio che dovrà fare una modifica a quella funzione, se non sa a memoria i codici ASCII si scervellerà per capire che cos'è quel 48. E se il computer non utilizzasse l'ASCII ma un altro set di caratteri? Scrivi '0' (carattere 0) al posto di 48 (numero 48) e risolvi elegantemente il problema. Ci pensa il C a trattarlo come numero;
5) sarebbe meglio evitare tutti quegli "if" e "else if" con codice ripetuto, cercando una soluzione più universale.
Io farei così:
- Codice: Seleziona tutto
#define LUNGHEZZA 3
/* altro codice qui in mezzo... */
char* ToArrayChar(unsigned char numero)
{
static char MioDato[LUNGHEZZA + 1];
char *p = MioDato + LUNGHEZZA;
*p = '\0';
do
{
p = p - 1;
*p = numero % 10 + '0';
numero = numero / 10;
}
while (numero > 0);
return p;
}
oppure, in modo un po' più criptico ma (si spera) più efficiente:
- Codice: Seleziona tutto
#define LUNGHEZZA 3
/* altro codice qui in mezzo... */
char* ToArrayChar(unsigned char numero)
{
static char MioDato[LUNGHEZZA + 1];
char *p = MioDato + LUNGHEZZA;
*p = '\0';
do
{
*--p = numero % 10 + '0';
}
while (numero /= 10);
return p;
}
Devi tener presente che ogni chiamata alla funzione distrugge il valore ritornato dalla chiamata precedente.
Quindi devi usare il valore ritornato prima di effettuare una nuova chiamata, oppure conservarlo ricopiandolo in un'altra stringa.