Beh ... sì, ci sono degli errori ... e' "grave" soprattutto questo
*st = *st - '0';
che modifica la stringa di partenza ...
Piuttosto penserei a questo
escludendo ovviamente il codice di controllo del contenuto della stringa (dando per scontato che la stringa sia una sequenza di cifre ...).codice:int foo (char *st) { int l, res=0; for(l=0; *(st+l); l++) { res *= 10; res += *(st+l)-'0'; } return res; }
P.S. Pero' la scrittura di una atoi personalizzata e' OT in questo caso ...