Autor Tema: función devuelve array  (Leído 2986 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado cucu

  • PIC12
  • **
  • Mensajes: 74
función devuelve array
« en: 27 de Enero de 2009, 09:57:58 »
hola, estoy intentando hacer una función que al pasarle un array me lo devuelve "dado la vuelta":

Código: [Seleccionar]
char *gira(char *data){


char length = strlen(data);
char *girado;
char i;

for(i = 0; i< length; i++){
*girado++ = *data++; //Esto está mal
}

return girado;
}



y en el main tengo:


Código: [Seleccionar]

char prueba[];
char hola[] = "hola";

prueba = gira(hola);




Pero me sale error, que no puede asignar un array.

¿alguien sabe donde está el error? ¿en la función o en la manera de llamarla?

Muchas gracias. Saludos
« Última modificación: 27 de Enero de 2009, 10:16:41 por cucu »

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: función devuelve array
« Respuesta #1 en: 27 de Enero de 2009, 12:01:11 »
Hola cucu, podrias especificar bien q compilador usas, y en q linea te tira el error? Yo creo q el error esta en q no le asignas memoria a prueba[]. Proba declarandola como char prueba[32]; por ejemplo. Y si no, malloc.
saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado cucu

  • PIC12
  • **
  • Mensajes: 74
Re: función devuelve array
« Respuesta #2 en: 28 de Enero de 2009, 10:36:43 »
Hola, uyy es verdad se me olvidó! lo siento! Uso C18, y bueno, mis espectativas van a menos. Ahora me conformo con hacer una función que me devuelva un array, ¿eso es posible?

Tengo:

Código: [Seleccionar]

char *devuelveArray(void){
   char *devuelto;
   for(i = 0; i< 4; i++){
*devuelto++ = '1';
   }
   return devuelto;
}


Vamos un array de cuatro elementos que todos contienen el valor ascii de 1.

desde el main:

Código: [Seleccionar]
void main (void){

char prueba[32];
adios = devuelveArray();
}


Y esto me da tres errores:

Error [1153] cannot assign array type objects
Error [1102] cannot assign to 'const' modified object
Error [1131] type mismatch in assignment


Si pongo:

char *prueba si compila pero si luego lo mando a imprimir por puerto serie no tiene los unos, tiene simbolos raros...

En fin... cualquier sugerencia será bienvenida. Gracias!

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: función devuelve array
« Respuesta #3 en: 28 de Enero de 2009, 12:40:25 »
Cucu, una funcion no devuelve un array, sino un puntero al mismo. Creo saber cual es el problema. Vos estas devolviendo un puntero q se llama "devuelto", pero es una variable local de la funcion, y se destruye al terminar la funcion. Podrias hacer 2 cosas:
1- Declaras "devuelto" como global.
2- A la funcion le pasas como parametro un puntero, y q la misma trabaje sobre eso.
Te dejo un ejemplo, a ver si anda (aviso, nunca trabaje con c18)
Código: [Seleccionar]
void devuelveArray(char *array)
{
   for(i = 0; i< 4; i++)
*(array++) = '1';
}
void main (void)
{
char prueba[8];
devuelveArray(prueba);
}
espero q te funcione, adios!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: función devuelve array
« Respuesta #4 en: 28 de Enero de 2009, 17:15:19 »
Si no quieres usar punteros declara una variable global llamada buffer, llamas a dicha función para meter ahí los datos y los recoges o los formateas cuando quieras de forma controlado, es más sencillo, pero no sé para que quieres hacer esto por lo que tampoco sé si esto es o no una buena opción. Tambien te digo que nunca vas a poder devolver un array...lo que sería devolver un string, sino podrás devolver la dirección de memoria del array.

Te dejo un ejemplo.

Código: [Seleccionar]

char buff[256] = "";
int size;
char *array;
int i=0;

array = "holas";

do
{
buff[i] = *array;
i++;
array = array++;

}while (*array!='\0');
buff[i]='\0';//No se nos olvide cerrar el array de char, buffer tendrá lo mismo que array



Un saludete.

Desconectado cucu

  • PIC12
  • **
  • Mensajes: 74
Re: función devuelve array
« Respuesta #5 en: 29 de Enero de 2009, 05:46:36 »
Gracias por la ayuda, ya lo he conseguido, me habeis ayudado mucho los dos. Lo de los punteros es que es un lío, sí sabía que lo estaba haciendo con punteros porque :

char []devuelto (void){} daba error de compilación, pero lo estaba enfocando mal.

Bueno, lo dicho, muchas gracias a los dos, muy útil!