Título: Pasar vector de puntero a char a las funciones[C] Publicado por: NOB2014 en 20 Junio 2016, 16:14 pm Hola.
Tengo una duda que deseo evacuarla ahora porque me impide seguir estudiando y es: como se pasan los vectores de punteros a las funciones. Código
Código
Código Dejo el programa por si les hace falta para interpretar mejor la duda, luego tengo que continuar consultándolos porque la siguiente linea sé que estoy haciendo todo mal pero es la primera vez que lo intento y realmente no logro solucionarlo, hacer lo mismo con números me funciona a la perfección, en cambio, con cadenas no. - Código
Código Saludos y gracias. - Título: Re: Pasar vector de puntero a char a las funciones[C] Publicado por: AlbertoBSD en 20 Junio 2016, 16:29 pm tmp es un vector de caractes:
Código
No puedes posteriormente tratar de reasignarle memoria. Código Si quieres usarlo asi tienes que declararlo como apuntador desde el principio. Código No entiendo cual es exactamente tu duda. si es sobre el strcpy, el primer parametro es el destino de la copia y el segundo es el origen. http://www.cplusplus.com/reference/cstring/strcpy/ Adicional a eso hice un video el dia de ayer sobre cadenas precisamente toco el tema de copiar cadenas de un buffer a otro. mG8_nY3Yzg4 Saludos. Título: Re: Pasar vector de puntero a char a las funciones[C] Publicado por: geeke en 20 Junio 2016, 17:10 pm como se pasan los vectores de punteros a las funciones. Con Código
O Código
Título: Re: Pasar vector de puntero a char a las funciones[C] Publicado por: AlbertoBSD en 20 Junio 2016, 17:41 pm Aaa pasar el vector de apuntadores si es como te dice geeke, como no vi ningun vector de apuntadores declarado pense que era otra cosa.
Por cierto deberia de declarar el vector de fraces como Código
y cada que asignes un espacio para un apuntador mas. Tambien tienes que inicializar ese Nuevo apuntador. Es decir: Código
La otra es que debes de retornat el valor del apuntador de fracea ya que si realloc cambia la posición de memoria de fraces dentro de una de las funciones la funcion main no se va a enterar y va a tener una copia antigua del apuntador. En mi canal hice un video sobre Apuntadores dobles. No pongo en link por que va a parecer spam XD Saludos Título: Re: Pasar vector de puntero a char a las funciones[C] Publicado por: NOB2014 en 20 Junio 2016, 21:46 pm Hola.
Creo que nunca me costo tanto entender un tema como en este caso, tan solo para intentar avanzar me podrían decir que tengo que modificar para que no me del siguiente error. Citar ayp.c:11:10: warning: assignment from incompatible pointer type [enabled by default] frases = (char*)realloc( frases, i * sizeof(char*) ); Código No tendrá mucha relación con el programa que quiero hacer pero trate de hacerlo sencillo para poder entenderlo. - Saludos. Título: Re: Pasar vector de puntero a char a las funciones[C] Publicado por: AlbertoBSD en 20 Junio 2016, 21:55 pm Siempre es bueno simplificar los ejemplos para entender los conceptos.
Recuerda que es un doble apuntador y deberia de ser doble * Código Deberia de funcionar con eso. Saludos. Título: Re: Pasar vector de puntero a char a las funciones[C] Publicado por: NOB2014 en 20 Junio 2016, 23:25 pm Al fin logre que funcione, dejo el código porque además del error que me solucionaste tenía 2 más. -
El incremento de la variable i va al comienzo del bucle y no al final, creo que es porque en la primer iteración valiendo cero i no reservaría memoria. - Y el segundo lo producía porque no igualaba a NULL el puntero frases. - Código
Saludos. Título: Re: Pasar vector de puntero a char a las funciones[C] Publicado por: geeke en 21 Junio 2016, 01:13 am Tienes fugas de memoria en el interior del bucle en cada llamada a calloc() asignas un nuevo bloque de memoria a tmp y el anterior se pierde. Debes reservar espacio fuera del bucle o liberar en cada iteración y no olvides liberar al final en ambos casos.
Título: Re: Pasar vector de puntero a char a las funciones[C] Publicado por: AlbertoBSD en 21 Junio 2016, 01:20 am No tiene fugas de memoria si te fijas las asigna a su variable frases.
Código
Mas bien la variable tmp la tiene de mas pudo usar directamente. Código Pero es entendible que tenga esos detalles ya que apenas esta aprendiendo a usar apuntadores dobles. Eso si solo esta liberando el apuntador a frases y no todos los apuntadores individuales. Solo seria agregar un Código en el segundo while justo despues de imprirlas y antes de incrementar el contador. Saludos Título: Re: Pasar vector de puntero a char a las funciones[C] Publicado por: NOB2014 en 21 Junio 2016, 02:04 am Hola.
Bueno al fin en este día aprendí más de lo esperado, con la primer respuesta pensé que no podría nunca explicar mis dudas, pero todo se fue encaminando, muchas gracias a todos los que me ayudaron en este post. Espero que ahora este aceptable y me quiero ver encajando todo esto en el otro programa, espero lograrlo. Código
Saludos. Título: Re: Pasar vector de puntero a char a las funciones[C] Publicado por: NOB2014 en 21 Junio 2016, 16:03 pm Hola, que tengan un muy buen día. -
Continuo con mis dudas pero ante quiero efectuar una aclaración, si consideran que esto de preguntar y preguntar, y no recurrir a un manual a buscar por mí mismo y piensan que eso es lo que debo hacer, todo ben, yo tengo mi criterio formado del porqué continuamente recurro a Uds. para evacuar mis dudas, en definitiva, si este post no tuviera respuesta lo entendería perfectamente y si me pegaran una bofetada psicológica también. - Dicho esto pasa a consultarles sobre mis dudas. Intento pasar el ingreso de los datos a una función y tengo (aparentemente) un solo error y esta en la siguiente linea. - Código
Citar ayp.c:10:2: error: invalid operands to binary & (have ‘int’ and ‘char **’) Y la pregunta del millón, porque debo utilizar doble apuntador, tengo claro que lo que contiene la variable apuntador es una dirección de memoria y que un doble apuntador contiene la dirección de memoria de otro puntero. -Código Los dobles punteros son lo que no puedo interpretar, por lo menos en este caso. - Saludos. Título: Re: Pasar vector de puntero a char a las funciones[C] Publicado por: AlbertoBSD en 21 Junio 2016, 16:17 pm Si la funcion esta devolviendo un doble apuntador
deberia de ser: Código
Con eso corrijes el error Respecto a tu duda. Citar Y la pregunta del millón, porque debo utilizar doble apuntador No se exactamente por donde va la pregunta. Pero se usa doble apuntador para darle mas sentido al programa, que el contenido que esta siendo apuntado es un vector de apuntadores. Que a su vez cada apuntadorindividual apunta un vector de caracteres... Es complicado pero una vez que lo pillas al 100 estarias entendiendo uno de los topics mas complicados del lenguaje. Te dejo mi video, creo que ya te lo habia pasado en otro de mis respuestas. BLrJnp1x--w Título: Re: Pasar vector de puntero a char a las funciones[C] Publicado por: NOB2014 en 21 Junio 2016, 17:33 pm Citar el contenido que esta siendo apuntado es un vector de apuntadores. Ya había leído esto en alguna parte y creo que es la clave para entender los punteros dobles, en cuanto ala solución que escribiste no me funciona, sigue sin compilar.- Saludos. Título: Re: Pasar vector de puntero a char a las funciones[C] Publicado por: AlbertoBSD en 21 Junio 2016, 17:51 pm Debes de cambiar
el prototipo de funcion. la funcion en si y el return no deberia de tener los 2 asteriscos. De ahi en mas en que otra linea te da error? Saludos Título: Re: Pasar vector de puntero a char a las funciones[C] Publicado por: NOB2014 en 22 Junio 2016, 14:28 pm Hola, buen día para todos.
Como se nota en el código pude efectuar un avance pero me falta algo importante y es que no logro retomar la dirección de memoria a main del puntero frases como lo sugería Alberto. Citar La otra es que debes de retornat el valor del apuntador de fracea ya que si realloc cambia la posición de memoria de fraces dentro de una de las funciones la funcion main no se va a enterar y va a tener una copia antigua del apuntador. Código
PD: En definitiva, lo que me falta es poder imprimir los datos ingresados desde main y no desde la función ingreso.- Espero puedan ayudarme con esto también. Saludos. Título: Re: Pasar vector de puntero a char a las funciones[C] Publicado por: AlbertoBSD en 22 Junio 2016, 14:46 pm Código
Saludos Título: Re: Pasar vector de puntero a char a las funciones[C] Publicado por: NOB2014 en 22 Junio 2016, 14:56 pm Muy bien maestro funciona a la perfección, por si alguien quiere correr tu código como Ej. deberías agregarle el prototipo. -
Muchas gracias por tu tiempo, Saludos. |