Título: [DUDA C] Dividir cadena en subcadenas (similar argv) Publicado por: setwarn en 6 Diciembre 2010, 14:42 pm Buenas a todos, es mi primer post aunque llevo tiempo leyendo y empapándome de la sabiduría que hay por aquí, asi que me he decidido lanzarme a preguntar, os cuento:
Estoy peleándome con los punteros, intento hacer una función (aunque de momento es un progama para no liarme) que haga algo similar a lo que devuelve argv, es decir, que divida una orden en varias cadenas, cada una apuntada por un puntero distinto para poderlas referenciar mediante los corchetes (Ej: orden[0],orden[1]) Quiero hacerlo para cualquier número de palabras, por lo que uso memoria dinámica, para dividir la orden uso strtok y su comportamiento es correcto, el problema lo tengo a la hora de manejar los punteros: En **resul, voy reservando memoria con realloc para los punteros que apuntan a cada palabra, por tanto, mientras haya tokens hago lo siguiente: - Aumento el tamaño de resul - Reservo memoria para el puntero al token - Le asigno el token Código: #include <string.h> La salida al ejecutarlo es: Código: $ ./lectura_consola Si lo arranco con valgrind para ver los fallos de memoria cuando va a hacer free(resul[0]) dice lo siguiente: Código: liberando: 0 Por otro lado al intentar pasar esto a una función, también me daba problemas, pero eso lo dejo para más adelante, de momento a ver si puedo arreglar esto con vuestra ayuda. Título: Re: [DUDA C] Dividir cadena en subcadenas (similar argv) Publicado por: 3mp3z@ndo en 6 Diciembre 2010, 17:24 pm Bueno, yo todavia no me he metido con el tema de punteros y por ese lado no puedo ayudar, pero al intentar compilar el código me daba warnings por pasarle demasiados argumentos a strtok, hice un par de retoques y en apariencia parece funcionar, aqui te dejo el codigo tal y como me funciona a mi:
Código
Si te funciona, de lujo, si no seguro que pasa alguien por aqui y te aclara el tema de los punteros Saludos Título: Re: [DUDA C] Dividir cadena en subcadenas (similar argv) Publicado por: setwarn en 6 Diciembre 2010, 18:01 pm Hola 3mp3z@ndo !
Me has hecho recordar una cosa que no dije en el primer post xD Lo estoy haciendo bajo linux, misteriosamente en windows si funciona y no da ningún mensaje de error al liberar memoria, pero en linux (ubuntu concretamente) sigue dando el mismo error. El strtok realmente me da igual usar strtok o strtok_r, había usado strtok_r porque leí que en caso de usar hilos hay que usar ese concretamente y como quería dejar el código para reusarlo... Gracias de todas formas! |