Título: [C] Funcion Split Publicado por: mr.blood en 28 Marzo 2013, 14:46 pm Espero que a alguien le sirva. Yo no he visto fallos, si los encontrais, comentadlos por favor.
Código
Sa1uDoS EDITO: Ahora se libera la memoria reservada con malloc. Título: Re: [C] Funcion Split Publicado por: naderST en 28 Marzo 2013, 16:29 pm Esta bien pero recuerda que debes hacerle free a cada palabra y luego al retorno porque estas dejando memory leaks. Otra cosa, sería interesante que el delimitador pudiera ser un string. Aquí te dejo una que hice yo, pero en C++ mucho más sencillo utilizando la clase string y vector:
http://gauss.com.ve/articulos/articulo.php?id=10 Título: Re: [C] Funcion Split Publicado por: mr.blood en 28 Marzo 2013, 16:34 pm En realidad aunque es una buena costumbre usar free, el SO se encarga de liberar la memoria reservada cuando el proceso termina ;). Aun asi deberia mejorar eso.
Sa1uDoS Título: Re: [C] Funcion Split Publicado por: naderST en 28 Marzo 2013, 16:36 pm En realidad aunque es una buena costumbre usar free, el SO se encarga de liberar la memoria reservada cuando el proceso termina ;). Aun asi deberia mejorar eso. Sa1uDoS Sí, pero que tal si mi proceso es un servidor que va a correr durante meses usando esa función split cada vez que recibe alguna petición? En cierto punto va a reventar. Fuera de eso, muy bueno el aporte. Título: Re: [C] Funcion Split Publicado por: durasno en 28 Marzo 2013, 21:48 pm Y para molestar un poco mas faltaria comprobar q malloc asigne memoria correctamente
Saludos Título: Re: [C] Funcion Split Publicado por: rir3760 en 29 Marzo 2013, 06:11 am Espero que a alguien le sirva. Yo no he visto fallos, si los encontrais, comentadlos por favor. Algunos comentarios:* Para tener acceso al prototipo de malloc es mejor, en lugar de <malloc.h>, incluir <stdlib.h> ya que este ultimo es parte de la biblioteca estándar de C. * Cuando reservas memoria para cada parte de la cadena debes utilizar "j + 1", el elemento adicional es para almacenar ahí el '\0'. * En lugar de copiar la cadena y a continuación almacenar manualmente el '\0': Código Puedes realizar los dos pasos con sprintf: Código * En la función "len_palabra" puedes obtener el numero de caracteres utilizando solo una variable local, de esta forma: Código
Un saludo Título: Re: [C] Funcion Split Publicado por: mr.blood en 29 Marzo 2013, 10:43 am La funcion len_palabra puedo eliminarla y aprovechar el for donde busco los inicios, pero muy buen apunte. Luego cambio todo esto.
Lo del sprintf ni se me ocurrio. Gracias a todos por los comentarios, en especial a @rir3760. Luego lo cambio y edito. Sa1uDoS |