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!
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!