Programación General > C/C++
funcion que devuelve una cadena
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
[#] Página Siguiente
Ir a la versión completa