Programación General > C/C++

 funcion que devuelve una cadena

(1/2) > >>

kingsizen:
hola amigos, como dice el titulo estoy tratando de hacer una funcion que devuelva una palabra, y no se como hacerlo


--- Código: C --- # include <stdio.h># include <string.h> char get (char a[]){     scanf("%s",a);     return a;}   main(){      char arreglo[10],palabra[10];                  printf ("Ingrese una palabra");      palabra = get(arreglo);      printf ("%s",palabra);}  
tambien estoy pensando en usar strcpy() en vez de palabra=get (arreglo)... pero bueno, ustedes me diran. espero sus respuestas. muchas gracias!

m0skit0:
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:
era un ejemplo solo para probar como una funcion devolvia una cadena


--- Código: C --- # include <stdio.h># include <string.h> char*  get (char a[]){     scanf("%s",a);     return (a);}   main(){      char arreglo[10],*palabra[10];                  printf ("Ingrese una palabra");      *palabra = get(arreglo);      printf ("%s",*palabra);}  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:

--- Cita de: "kingsizen" ---ahi parece funcionar.
--- Fin de la cita ---
No, no parece, sino funciona  ^_^


--- Cita de: "kingsizen" ---cada vez ke quiera que una funcion me devuelva una palabra tengo ke hacerlo con punteros??.
--- Fin de la cita ---
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?
--- Fin de la cita ---
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 ---cadena = 0x80000000 En la RAM: 0x80000000    0x500x80000001    0x610x80000002    0x6C0x80000003    0x610x80000004    0x620x80000005    0x720x80000006    0x610x80000007    0x00 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:
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!

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa