ahi parece funcionar.
No, no parece, sino funciona
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.
me podrias dar una explicacion sobre como funciona el puntero en este caso?
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:
cadena = 0x80000000
En la RAM:
0x80000000 0x50
0x80000001 0x61
0x80000002 0x6C
0x80000003 0x61
0x80000004 0x62
0x80000005 0x72
0x80000006 0x61
0x80000007 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.