Newsgroup: it.comp.lang.c++
Titolo: funzione itoa: problemino

ho necessita' di gestire dei numeri costringhe di caratteri; una funzione
della mia classe fa pressapoco quello che c'e' scritto qui sotto;
    char *index="0";
    int tmp=atoi(index);
    tmp++;
    itoa(tmp,index,10);
ecc.
il compilatore mi rispnde "implicit declaration of function int itoa(...)":
cosa significa? avevo ricevuto un messaggio di errore simile per la funzione
strcat, poi un punto e virgola di troppo ha risolto il problema, quindi non
mi sono peritato di capirne il significato, ma adesso vi assicuro che {, } e
; sono al posto giusto.
Help!!!
ciao, nIcO.
P.S: Ovviamente ho incluso la <stdlib.h>

 P.S: Ovviamente ho incluso la <stdlib.h>
'itoa' NON e' dichiarato in stdlib; in effetti e' una funzione
non-standard, che si trova solo in alcuni ambienti.  Prova con
sprintf, che e' la maniera standard di convertire un valore numerico
nella sua rappresentazione in termini di caratteri.
-- 
Maurizio Loreti                      
http://wwwcdf.pd.infn.it/~loreti/mlo.html
Un. of Padova, Dept. of Physics - Padova, Italy          
lor...@padova.infn.it

cosa significa? avevo ricevuto un messaggio di errore simile per la funzione
Siginifica che il tuo compilatore (con le librerie che dispone) non conosce la funzione "itoa" e quindi crea il prototype "al volo".
Se pero' non ottieni anche un messaggio di errore dal linker di "unresolved external" vuol dire che ti manca solo il .H corretto. Prova a cercare la funzione in tutti i .H delle librerie...
A presto,
Angelo.

]


itoa e' C standard, utilizzo il djgpp ed il prototipo della funzione e' in
stdlib.h (avevo gia' controllato);
per l'utilizzo della funzione mi sono attenuto alla guida di riferimento che
avevo nella dir del DJGPP libc.hlp; tale guida dice che l'indirzzo della
stringa e' scritto nel puntatore, passato come secondo argomento della
funzione; la cosa strana (almeno per me, aspetto delucidazioni) e' che il
prototipo e':
char *  itoa(int value, char *buffer, int radix);
ho provato ad assegnare l'output della funzione ad un puntatore a char, ma
il problema rimane.

 stdlib.h (avevo gia' controllato);
Non e' standard.  Punto.  Consulta la sezione 7.10 dello Standard
AMSI/ISO, o la pagine 251-253 del K&R2.


AMSI/ISO, o la pagine 251-253 del K&R2.
Confermo, non e` una funzione standard.
Paolo
-----------------------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
-----------------------------------------------------------------

char *  itoa(int value, char *buffer, int radix);
Non ho bene capito quale sarebbe il problema: preallochi un buffer e
poi ne passi l'indirizzo come secondo parametro (controllare il return
value e' inutile, perhc'e e' sempre buffer)


 stdlib.h (avevo gia' controllato);
E' in stdlib.h ma è racchiuso nella #ifndef __STRICT_ANSI__. Questo
significa che non è standard. Se non vuoi il warning devi mettere prima
dell'#include <stdlib.h>
#undef __STRICT_ANSI__
oppure semplicemente disabilitare gli warnings.
EMG

 AMSI/ISO, o la pagine 251-253 del K&R2.
Stranamente, anche VC concorda. Non è ANSI->non è standard
Ovviamente VC propone dei "Microsoft Specifics" (manco l'avessero inventato
loro) _itoa, _itoa64, ecc.
Ma a sentire MS, hanno inventato loro anche Internet.
--
Alessandro Monti

     itoa(tmp,index,10);
Adriano.

>     itoa(tmp,index,10);
Premessa: ho risolto il mio problema, grazie a tutti per i consigli, da voi
sto imparando veramente tanto, credo di aver scritto per la prima volta
codice "pulito".
Veniamo a noi: il codice che ho citato puo' tranquillamente essere inserito
in un programma di prova a se' stante e, a parte il warning relativo a itoa
di cui mi ha spiegato EMG, non ottengo alcun errore o warning ed il
programma fa quello che deve fare. Leggi questo codice:
char *prova="0";
char *tmp=new char[1];
tmp[0]='a';
tmp[1]=0;
prova=tmp;
cout << prova;
il programma stampa su schermo "a" questo perche' sto semplicemente copiando
degli indirizzi di memoria da una variabile ad un'altra; il vero problema e'
che non puoi deallocare l'area di memoria puntata da tmp (e prova) usando
una delete[] su prova (cio' non toglie che quanto scritto e' orrendo e va
evitato).
Per farla breve, credo che la funzione itoa allochi della memoria per
scrivere la stringa che rappresenta il numero, quindi copia l'indirizzo di
tale area nel puntatore
che io le passo come secondo argomento, conclusione: il codice che AVEVO
scritto funzionava ugualmente (ed i comportamenti strani del programma erano
dovuti ad un'altra routine!!).
Fatemi sapere se ho sparato una balla per l'ennesima volta :-)
ciao, nIcO

 scrivere la stringa che rappresenta il numero,
No, itoa memorizza il risultato nella stringa che tu fornisci e che hai
la responsabilità di gestire.
EMG