Título: Array de punteros. Publicado por: soyloqbuskas en 30 Enero 2012, 13:26 pm ¡Buenas a todos!
Necesito hacer la siguiente funcion: Código: char **parser_orden(const char *orden) {} Esta funcion a la que se le pasa una cadena de caracteres, retorna un array de punteros el cual tiene en cada posicion del array un puntero a cada palabra de la cadena que se le pasa por referencia. Para crear esta funcion me he hecho un programa a parte para ponerlo a prueba, y esto es lo que tengo escrito: Código: #include <stdio.h> Teoricamente, si escribieramos 2 palabras ("hola mundo"), la salida deberia ser: hola mundo Pero no es asi, porque aux[0] y aux[1], apunta al mismo valor..... ¿como puedo rellenar mi array char**aux[10] con punteros a cada una de las palabras de char*orden? Gracias, un saludo. Título: Re: Array de punteros. Publicado por: soyloqbuskas en 30 Enero 2012, 15:17 pm Bueno, ya se me a ocurrido como hacerlo....mas o menos....
La idea es usar malloc() y poner algo como.... Código: aux[j]=malloc(strlen(aux1)); De esta menera rellena mi array con punteros a variables. Lo unico que me queda saber es....¿Como puedo copiar el valor al que apunta aux1, al valor que apunta aux[j]? Es decir, dados 2 punteros que apuntan a distintas posiciones, ¿como puedo hacer que los valores a los que apuntan sean iguales sin cambiar las direcciones a las que apuntan? Título: Re: Array de punteros. Publicado por: rir3760 en 30 Enero 2012, 15:47 pm Ese programa tiene varios errores. Lo primero es evitar el uso de la función "gets", mas información en el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).
Si apenas empiezas con el tema de punteros deberías conseguir un buen libro sobre el tema, uno muy bueno pero en ingles y algo caro es: Pointers on C, 1st edition Kenneth Reek Addison Wesley ISBN: 0673999866 Es un libro enfocado en C estándar (C90) con especial énfasis en el tema de manejo de direcciones de memoria (punteros). Comparado con K&R2 lo bueno es que tiene explicaciones mas detalladas (incluyendo gráficas), lo malo es que su selección de ejemplos no es tan buena como el mencionado. El primer error importante es utilizar la variable "orden" sin darle un valor antes. Debido a que su valor inicial (a falta de uno) es no definido o "basura" no lo puedes utilizar (debes utilizar antes malloc o bien cambiar su uso por un array). También hay que utilizar nombres claros y descriptivos, por ejemplo para encontrar el uso (y diferencias) entre "aux" y "aux1" hay que revisar en detalle el programa. Mejor acostúmbrate desde ahora. Tampoco puedes utilizar esto: Código Porque los objetos "aux[N]" son de tipo "char **" mientras que printf espera un "char *". Si entiendo correctamente buscas obtener las direcciones de cada una de las palabras. Para ello hay varias formas como utilizar strcspn + strspn, sscanf, etc. Un ejemplo utilizando el par strcspn + strspn: Código
---- Edito: Otra opción es mediante la función sscanf utilizando el especificador "%n" el cual nos da el numero de caracteres coincidentes hasta el momento: Código
Un detalle: funciona correctamente con GCC 3.x pero, por alguna extraña razón, no da los resultados correctos con Lcc-Win32 (debería darlos ya que hasta donde revise la documentación el comportamiento debe ser el esperado). Un saludo Título: Re: Array de punteros. Publicado por: soyloqbuskas en 30 Enero 2012, 20:28 pm ¡Muchas gracias rir3760!
Citar El primer error importante es utilizar la variable "orden" sin darle un valor antes. Debido a que su valor inicial (a falta de uno) es no definido o "basura" no lo puedes utilizar (debes utilizar antes malloc o bien cambiar su uso por un array). También hay que utilizar nombres claros y descriptivos, por ejemplo para encontrar el uso (y diferencias) entre "aux" y "aux1" hay que revisar en detalle el programa. Mejor acostúmbrate desde ahora. http://foro.elhacker.net/programacion_cc/array_de_punteros-t352112.0.html#ixzz1kyGoKDyW Como ya dije al principio solo un programa de prueba, no le di mucha importacia a los nombres de las variables y demas... Citar Para crear esta funcion me he hecho un programa a parte para ponerlo a prueba, y esto es lo que tengo escrito: Yo es que vengo de programar en lenguajes bastantes mas estrictos que C, y por eso me hago un lio con los punteros y punteros dobles, etc. Asi que muchas gracias por tu ayuda, un saludo. |