View Full Version : Problemas com itoa() [C]


LaNgSuYaR
16-04-2007, 21:08
Boas! eu tenho um trabalho em C para terminar até ao final do semestre. Até aqui, tudo estava a correr bem, mas por estar a usar matrizes como ambiente para o utilizador, surgiu-me um pequeno problema.

Eu estou a tentar converter um int para string, usando a função itoa(), mas estou a ter bastantes problemas com ela na medida em que está-me sempre a dar "Bus error". Já li por aí que a função itoa() é especialmente delicada em certas situações, mas precisava msmo disso porque quero imprimir inteiros numa matriz de char's e não arranjo maneira. Eu acho que o problema principal se encontra no uso de apontadores, mas para este caso é mesmo o que necessito. A função que estava a usar é a seguinte:


void strreverse(char* begin, char* end) {

char aux;

while(end>begin)

aux=*end, *end--=*begin, *begin++=aux;

}

void itoa(int value, char* str, int base) {

static char num[] = "0123456789abcdefghijklmnopqrstuvwxyz";

char* wstr=str;

int sign;


// Validate base

if (base<2 || base>35){ *wstr='\0'; return; }


// Take care of sign

if ((sign=value) < 0) value = -value;


// Conversion. Number is reversed.

do {wstr++; *wstr = num[value%base];} while(value/=base);

if(sign<0) {wstr++; *wstr='-';}

*wstr='\0';


// Reverse string

strreverse(str,wstr-1);

}


Ora, eu já consegui perceber como a função funciona, não entendo é o erro que me aparece sempre. só se estiver a declarar mal o apontador na main()!

Tnkx in advance!
Cumps!

Warrior
16-04-2007, 23:27
Estou com pressa, de modo que não li o post, só o título.
Usa o sprintf em vez do itoa.

LaNgSuYaR
17-04-2007, 02:10
Warrior tnkx! já resolvi o prob.... já tinha lido qualquer coisa acerca do sprintf, mas deve ter-me passado a noção de 'buffer'!! Já me permitiu adiantar e quanto o trabalho! :D

De qualquer das formas, fiquei com a curiosidade acerca do funcionamento da função itoa(), e que aparte a necessidade, fica o pedido de alguma informação concreta sobre a função!

Abraço!

sapropel
17-04-2007, 09:44
http://cplusplus.com/reference/clibrary/cstdlib/itoa.html (para referencia)
a função aceita 3 argumentos, o valor que queres converter, um buffer aonde guardar esse valor e a base numerica a ser usada.

(...)
int a = 325;
char buffer[10];
itoa( a, buffer, 10 );
(...)

buffer agora vai ter o valor "325\0"

joth5
13-05-2007, 17:37
vou aproveitar este topico :D

itoa é para converter string para inteiro ( int )
e para converter string para 'float' ??

precisava da resposta com alguma urgencia :)

desde de ja thnks ;)

Warrior
13-05-2007, 18:39
itoa é para converter um inteiro em string, não o contrário. Para converter uma string em float tens o "atof()".

joth5
13-05-2007, 18:52
itoa é para converter um inteiro em string, não o contrário. Para converter uma string em float tens o "atof()".

ok..thnks ;)

itoa é para converter um inteiro em string... entao _itoa é para converter uma string em inteiro


e para converter um float em string como é ?

HecKel
13-05-2007, 19:09
Onde foste buscar isso do _itoa ser string em inteiro?

Vê isto (http://www.space.unibe.ch/comp_doc/c_manual/C/FUNCTIONS/atoi.html), itoa significa integer to alpha (salvo erro), de forma similar consegues descobrir outras funções, no entanto com 2 segundos de google encontrei muita coisa, bastou-me pesquisar por itoa ;)

Sobre float to string, http://www.thinkage.ca/english/gcos/expl/c/lib/ecvt.html

abraços, HecKel

Warrior
13-05-2007, 19:45
float para string também podes usar o sprintf.

Basicamente:
Qualquer coisa para string: sprintf.
String para inteiro: atoi()
String para float: atof()