• Sábado 20 de Abril de 2024, 09:04

Autor Tema:  funcion que devuelve una cadena  (Leído 13844 veces)

kingsizen

  • Miembro activo
  • **
  • Mensajes: 41
    • Ver Perfil
funcion que devuelve una cadena
« en: Miércoles 22 de Abril de 2009, 18:40 »
0
hola amigos, como dice el titulo estoy tratando de hacer una funcion que devuelva una palabra, y no se como hacerlo

Código: C
  1.  
  2. # include <stdio.h>
  3. # include <string.h>
  4.  
  5. char get (char a[])
  6. {
  7.      scanf("%s",a);
  8.      return a;
  9. }
  10.  
  11.  
  12.  
  13. main()
  14. {
  15.       char arreglo[10],palabra[10];
  16.      
  17.      
  18.       printf ("Ingrese una palabra");
  19.       palabra = get(arreglo);
  20.       printf ("%s",palabra);
  21. }
  22.  
  23.  

tambien estoy pensando en usar strcpy() en vez de palabra=get (arreglo)... pero bueno, ustedes me diran. espero sus respuestas. muchas gracias!

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: funcion que devuelve una cadena
« Respuesta #1 en: Jueves 23 de Abril de 2009, 00:42 »
0
Amigo mío, el tipo de retorno de la función debe ser char * y no char, porque no es UN carácter, sino un puntero a una cadena de éstos.

Lo que no termino de entender es por qué quieres devolver la cadena 2 veces: por parámetro y por valor de retorno...

Salud

kingsizen

  • Miembro activo
  • **
  • Mensajes: 41
    • Ver Perfil
Re: funcion que devuelve una cadena
« Respuesta #2 en: Jueves 23 de Abril de 2009, 01:14 »
0
era un ejemplo solo para probar como una funcion devolvia una cadena

Código: C
  1.  
  2. # include <stdio.h>
  3. # include <string.h>
  4.  
  5. char*  get (char a[])
  6. {
  7.      scanf("%s",a);
  8.      return (a);
  9. }
  10.  
  11.  
  12.  
  13. main()
  14. {
  15.       char arreglo[10],*palabra[10];
  16.      
  17.      
  18.       printf ("Ingrese una palabra");
  19.       *palabra = get(arreglo);
  20.       printf ("%s",*palabra);
  21. }
  22.  
  23.  
ahi parece funcionar.
pregunta:
cada vez ke quiera que una funcion me devuelva una palabra tengo ke hacerlo con punteros??. me podrias dar una explicacion sobre como funciona el puntero en este caso?
muchas gracias!

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: funcion que devuelve una cadena
« Respuesta #3 en: Jueves 23 de Abril de 2009, 09:37 »
0
Cita de: "kingsizen"
ahi parece funcionar.
No, no parece, sino funciona  ^_^

Cita de: "kingsizen"
cada vez ke quiera que una funcion me devuelva una palabra tengo ke hacerlo con punteros??.
Sí, porque en C las "palabras" (cadenas de caracteres) son punteros.

Cita de: "kingsizen"
me podrias dar una explicacion sobre como funciona el puntero en este caso?
NO  :no:

Es broma. Primero debes entender cómo funcionan las cadenas de caracteres. Cuando defines char * cadena, por ejemplo, estás diciendo que cadena es un puntero (una dirección de memoria) y no un valor en sí. Dicho puntero apunta (ahora seguro entiendes lo del nombre) al primer carácter de la cadena. Por ejemplo:

Código: Text
  1. cadena = 0x80000000
  2.  
  3. En la RAM:
  4.  
  5. 0x80000000    0x50
  6. 0x80000001    0x61
  7. 0x80000002    0x6C
  8. 0x80000003    0x61
  9. 0x80000004    0x62
  10. 0x80000005    0x72
  11. 0x80000006    0x61
  12. 0x80000007    0x00
  13.  
Esta sucesión de bytes (/x50/x61/x6C/x61/x62/x72/x61/x00) son los códigos ASCII de Palabra. Así, cuando usas una función como printf() y le pasas un puntero a carácter, comienza a imprimir todos los caracteres que encuentre hasta llegar al carácter nulo (0 ó NULL). Puedes probar a imprimir las direcciones en que se hallan tus cadenas con printf("%x",cadena) o usar el depurador para ello.

En el caso de las funciones, lo que realmente devuelves como valor de retorno es la dirección del primer carácter. Cuando devolvías char sólo devolvías el valor (no la dirección) del primer carácter.

Espero haberme explicado.

kingsizen

  • Miembro activo
  • **
  • Mensajes: 41
    • Ver Perfil
Re: funcion que devuelve una cadena
« Respuesta #4 en: Viernes 24 de Abril de 2009, 00:22 »
0
fantastico como siempre m0skit0!. entendido..
ahora te dejo una duda..

esto:
char* calculo (bla bla bla)
es igual a:
char  *calculo (bla bla bla)

en el primer caso el * esta pegado al final de char.
en el segundo, * esta al principio de calculo.

espero tu respuesta! muchas gracias!

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: funcion que devuelve una cadena
« Respuesta #5 en: Viernes 24 de Abril de 2009, 11:22 »
0
Se te olvidó: char * calculo()  :lol:

Sí, da igual dónde esté el asterisco, siempre que esté entre el tipo y la variable  :good: