Título: arreglo de punteros y funciones Publicado por: m@o_614 en 27 Agosto 2013, 00:58 am saludos
tengo declarado un arreglo de punteros por ejemplo: char* a[N], y para ingresarle los datos tengo que asignarle memoria a cada uno de los punteros con malloc, una vez que ya hice eso tengo que enviar cada uno de los punteros a una funcion x, y es ahi donde tengo el problema que no se si tengo que enviar: funcion(a) o tambien tengo que enviarle la posicion o sea : *a[1],*a[2],*a[3] gracias Título: Re: arreglo de punteros y funciones Publicado por: rir3760 en 27 Agosto 2013, 03:43 am Por lo que comentas no puedes pasar a la función "a" porque seria (en la llamada) de tipo "char **" como tampoco "*a[1]" porque es de tipo "char". Debes utilizar "a[0]", "a[1]", etc.
Pero para estar seguros habría que revisar el programa completo. Un saludo Título: Re: arreglo de punteros y funciones Publicado por: Alien-Z en 27 Agosto 2013, 11:17 am Código
Saludos. Título: Re: arreglo de punteros y funciones Publicado por: m@o_614 en 27 Agosto 2013, 21:38 pm saludos
el programa es algo como esto: Código
en nombre_funcion tengo que pasarle por parametro cada uno de los punteros a los que le asigne memoria en la funcion main, y en el for tengo que recorrer la cadena para hacer un X procedimiento, es ahi donde tngo el problema gracias por sus respuestas Título: Re: arreglo de punteros y funciones Publicado por: Alien-Z en 27 Agosto 2013, 22:18 pm Los punteros a arrays se utilizan como un array en si, creo que esto es lo que preguntas:
Código
Un par de cosas: Código
¿Te das cuenta de que lo que haces es reservar en cada posición de la tabla un byte más que en la posición anterior?, es decir, si array[3] ocupa 3 bytes (y solo caben 3 caracteres), array[4] va a ocupar 4 bytes y caben 4 caracteres, por tanto no todas las posiciones tienen el mismo tamaño. Además debes añadir la marca fin "\0" a las cadenas de tipo char. No es correcto el uso de gets, en su lugar utiliza fgets: http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html Un saludo. Título: Re: arreglo de punteros y funciones Publicado por: m@o_614 en 29 Agosto 2013, 05:12 am saludos Alien-Z yo pense que con:
Código strlen(B)+1 ya le estaba agregando el fin de cadena \0. Título: Re: arreglo de punteros y funciones Publicado por: Alien-Z en 29 Agosto 2013, 10:21 am saludos Alien-Z yo pense que con: Código strlen(B)+1 ya le estaba agregando el fin de cadena \0. La función strlen(B) lo que hace es devolver el tamaño en bytes de la cadena B sin contar el byte que ocupa '\0', pero no la modifica ni le asigna nada, ni si quiera la marca fin. Es luego con strcpy() donde copias el contenido de B en array['i] incluyendo '\0', pero si no tiene suficiente tamaño se queda fuera. Lo que yo te quería decir es que esto "(strlen(B)+1)" es lo mismo que la constante "TAM", y que debes controlar que la entrada no sea más grande que dicha constante, cosa que no se hace con la función "gets" y por tanto debes incluir tú manualmente la marca fin '\0'. Saludos. Título: Re: arreglo de punteros y funciones Publicado por: rir3760 en 29 Agosto 2013, 17:06 pm el programa es algo como esto: En ese caso debes modificar la función ya que no tienes porque pasar la dirección del array (como tampoco se necesita el segundo parámetro).Código
en nombre_funcion tengo que pasarle por parametro cada uno de los punteros a los que le asigne memoria en la funcion main, y en el for tengo que recorrer la cadena para hacer un X procedimiento Con los cambios para que solo imprima los caracteres que componen la cadena: Código
Otro detalle que te falta en tu programa es liberar la memoria reservada. Un saludo Título: Re: arreglo de punteros y funciones Publicado por: m@o_614 en 30 Agosto 2013, 16:25 pm saludos rir3760 con las correcciones que hiciste ahora el programa funciona perfectamente, ahora solo me queda una duda, por ejemplo si tengo un puntero int *p;
y le quiero asignar memoria con malloc, tendria que hacer esto: p = (int *) malloc(10*sizeof(int)); pero me pregunto por que al hacer esto, esta mal *p = (int*) malloc(10*sizeof(int)); Título: Re: arreglo de punteros y funciones Publicado por: rir3760 en 30 Agosto 2013, 17:38 pm Porque:
1) "p" es la variable que puede almacenar una dirección de memoria. 2) "*p" es el objeto en la dirección indicada por "p". En otras palabras "p" es la dirección y "*p" el objeto apuntado. Un saludo |