Miércoles 18 de Diciembre de 2024, 11:36
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Convierte A Diferente Base
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Convierte A Diferente Base (Leído 2866 veces)
JPVM
Miembro activo
Mensajes: 40
Convierte A Diferente Base
«
en:
Viernes 27 de Mayo de 2005, 07:44 »
0
Me podrian ayudar a decirme que esta fallando
Código: Text
#define TEST
#include <stdlib.h>
#ifdef TEST
#include <stdio.h>
#endif
char *base_convert(const char *in, char *out, int rin, int rout)
{
long n;
char *dummy;
n = strtol(in, &dummy, rin);
return itoa(n, out, rout);
}
#ifdef TEST
int main(int argc, char *argv[])
{
int rin, rout;
char buf[40];
if (4 > argc)
{
puts("Usa: BASCNVRT <numero> <base_in> <base_out>");
return(-1);
}
rin = atoi(argv[2]);
rout = atoi(argv[3]);
printf("%s (base %d) = %s (base %d)\n", argv[1], rin,
base_convert((const char *)argv[1], buf, rin, rout), rout);
return 0;
}
#endif
Tweet
carmamezo
Miembro MUY activo
Mensajes: 232
Re: Convierte A Diferente Base
«
Respuesta #1 en:
Viernes 27 de Mayo de 2005, 08:34 »
0
Hola,
creo que el problema está en la forma en la que devuelves el char* de la función, cada función tiene su propia pila y por tanto las variables de cada función pueden ser usadas y permanecen sólo durante la ejecución de esa función (a no ser que las declares de tipo static).
Cuando itoa() te devuelve un apuntador a una cadena de caracteres ésta se encuentra en la pila de la función, así que cuando la función termine la memoria que ocupa puede ser corrompida. Para evitar esto haz lo siguiente:
Código: Text
char *base_convert(const char *in, char *out, int rin, int rout)
{
long n;
char *dummy;
char ret[1000];
n = strtol(in, &dummy, rin);
ret=itoa(n, out, rout);
return(ret);
}
o sino puedes hacer lo siguiente:
Código: Text
void base_convert(const char *in, char *out, int rin, int rout,char *ret)
{
long n;
char *dummy;
n = strtol(in, &dummy, rin);
ret=(char*)malloc(n*sizeof(char));
ret=itoa(n, out, rout);
}
int main ()
{
char *vble;
......
base_convert(.....,vble);
Un saludo.
No hay tonto más molesto que el ingenioso.
carmamezo
Miembro MUY activo
Mensajes: 232
Re: Convierte A Diferente Base
«
Respuesta #2 en:
Viernes 27 de Mayo de 2005, 08:36 »
0
Perdon, en el primer código se me olvidó poner el static delante de char ret[1000]:
static char ret[1000];
No hay tonto más molesto que el ingenioso.
JPVM
Miembro activo
Mensajes: 40
Re: Convierte A Diferente Base
«
Respuesta #3 en:
Viernes 27 de Mayo de 2005, 18:30 »
0
Código: Text
#define TEST
#include <stdlib.h>
#ifdef TEST
#include <stdio.h>
#endif
char *base_convert(const char *in, char *out, int rin, int rout)
{
long n;
char *dummy;
static char ret[1000];
n = strtol(in, &dummy, rin);
ret=itoa(n, out, rout);
return(ret);
}
#ifdef TEST
int main(int argc, char *argv[])
{
int rin, rout;
char buf[40];
if (4 > argc)
{
puts("Usa: BASCNVRT <numero> <base_in> <base_out>");
return(-1);
}
rin = atoi(argv[2]);
rout = atoi(argv[3]);
printf("%s (base %d) = %s (base %d)\n", argv[1], rin,
base_convert((const char *)argv[1], buf, rin, rout), rout);
return 0;
}
#endif
ya hice los cambios que me dijistes pero me da un error en la fila
Código: Text
ret=itoa(n, out, rout);
me da este error incompatible type in assignment
pmike
Miembro activo
Mensajes: 62
Re: Convierte A Diferente Base
«
Respuesta #4 en:
Viernes 27 de Mayo de 2005, 19:55 »
0
me parece q es por la forma de expresion
para pasar de entero a ascii o string es de la siguiente manera
itoa(int, string(Resultado), int base);
ademas me parece que imprimes antes de llamar a la funcion y es al reves
Saludos
-------------------------------------------------------------
http://www.ebookred.com
-------------------------------------------------------------
pmike
Miembro activo
Mensajes: 62
Re: Convierte A Diferente Base
«
Respuesta #5 en:
Viernes 27 de Mayo de 2005, 22:48 »
0
Hola de nuevo
oye de paso te dejo el codigo mas legible
pq utilizas const para q la variable no se modifique y yo pocas veces he utilizado
Tambien he visto en los argumentos del main utilizas el argumento argv (argumento value) con una sola indireccion o puntero, yo he utilizado doble puntero.
En la llamada a la funcion he pasado los enteros 'rin' y 'rout' por referencia
Espero q te haya servido
CODE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
base_convert(char *in, char *out, int *rin, int *rout)
{
long n;
char *dummy;
char ret[256];
n = strtol(in, &dummy, *rin);
itoa(n, out, *rout);
}
//---------------------------------------------------------------------------
int main(int argc, char **argv)
{
int rin=0, rout=0;
char buf[40];
if(4 > argc)
{
puts("Usa: BASCNVRT <numero> <base_in> <base_out>");
return(-1);
}
rin = atoi(argv[2]);
rout = atoi(argv[3]);
base_convert(argv[1], buf, &rin, &rout);
printf("\n%s (base %d) = %s (base %d)\n", argv[1], rin, buf, rout);
return 0;
}
-------------------------------------------------------------
http://www.ebookred.com
-------------------------------------------------------------
JPVM
Miembro activo
Mensajes: 40
Re: Convierte A Diferente Base
«
Respuesta #6 en:
Sábado 28 de Mayo de 2005, 05:00 »
0
antes me pedia el numero, luego la base en que esta el numero y al final a la base que lo queria pasar , y me daba el resultado del numero en la nueva base pero algo hice y ya no me pide eso
pmike
Miembro activo
Mensajes: 62
Re: Convierte A Diferente Base
«
Respuesta #7 en:
Sábado 28 de Mayo de 2005, 08:53 »
0
q raro
yo lo prove y funcionaba con el codigo de arriba
miralo mejor
-------------------------------------------------------------
http://www.ebookred.com
-------------------------------------------------------------
JPVM
Miembro activo
Mensajes: 40
Re: Convierte A Diferente Base
«
Respuesta #8 en:
Sábado 28 de Mayo de 2005, 16:54 »
0
yo estoy usando el dev-c++ cuando ejecuto me sale de una ves esto puts("Usa: BASCNVRT <numero> <base_in> <base_out>"); y luego precione una tecla y se sale
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Convierte A Diferente Base