C/Visual C - retorno de un char[4]

 
Vista:

retorno de un char[4]

Publicado por Asier (2 intervenciones) el 31/12/2001 21:15:26
Tengo la siguiente declaracion:
char *CodMax()
{
char max[4];
...
return max;
}

y lo que devuelve lo capturo en otra variable:
char Codigo[4];
...
Codigo = CodMax ();

Cuando llega al return tiene bien el valor, pero al devolver el valor y cogerlo en código se llena de basura. Porqué?
Gracias y feliz año a todos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:retorno de un char[4]

Publicado por Ernesto (2 intervenciones) el 31/12/2001 21:46:52
Amigo Asier, porque no tratas mejor de enviar el arreglo como argumeto puntero algo asi:

void codmax (char *max)
{
....
}

en main o la funcion que la mandas llamar manda algo asi:

main(){
char code[4];
codemax(code);
}

Espero y te resulte, asi trabajas directamente con los datos del arreglo original.

Alguna otra cosa escribeme con confianza.

Saludos. Atte. Ernesto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:retorno de un char[4]

Publicado por Alexis Leung (70 intervenciones) el 31/12/2001 23:24:12
Hay que recordar que las cadenas de texto en C se manejan muy diferentes que otros lenguajes como Pascal o Basic. En tu caso hay 2 soluciones sencillas (aunque hay muchas más).

char *CodMax()
{
char max[4];
...
return max;
}

char Codigo[4];

strcpy(Codigo,CodMax()); // Codigo ahora tiene lo que devuelve CodMax

Esta función strcpy() sirve especialmente para copiar una cadena a otra cadena.

También podemos usar punteros:

char *Codigo;

Codigo = malloc (4); // Reservamos 4 bytes

Codigo = CodMax();

Siempre debemos reservar memoria con malloc (se encuentra en stdlib.h) para que apunte a un lugar seguro de la memoria.

Espero haberte ayudado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:retorno de un char[4]

Publicado por Anarion (2 intervenciones) el 01/01/2002 02:39:45
Ten en cuenta que max[4] es solo accesible desde CodMax, y cuando sales, se destruye y su contenido queda indefinido. Como bien dice Ernesto, es preferible pasarle un argumento a CodMax en forma de puntero y copiar ahí el resultado. Además, recuerda que para copiar max[4] sobre otra variable, la copia ha de hacerse byte a byte, porque de otro modo lo que asignas son direcciones: prueba con esto

for (int i=0;i<4;i++,codigo[i]=max[i])
// suponemos que codigo tiene disponibles al menos 4 bytes

o bien esto otro

CopyMemory((char*)codigo,(char*)max,4);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar