[C con Clase] funcion de busqueda y reemplazo de cadenas con libreria dinamica [solucionado]
Diego Alejandro
diegomad en gmail.com
Sab Nov 21 19:34:57 CET 2009
El día 20 de noviembre de 2009 17:20, Programante
<programante en gmail.com> escribió:
> Un puntero donde has reservado 0 bytes es prácticamente idéntico a un
> puntero nulo (de hecho algunas implementaciones es lo que devuelven).
> No puedes hacerle un strlen() porque strlen() busca en esa memoria
> buscando un \0 que no has hecho.
>
> En general, estás omitiendo en toda la función la reserva de memoria de
> t5, y todos los accesos que le haces son inválidos.
> Deberías reservar memoria, inicialmente ponerlo a \0 y según tienes que
> añadirle texto, aumentarle el espacio asignado.
uy!, tienes razon, solucione el problema tal cual me dijiste, el
codigo de la funcion en la libreria quedo asi (el resto es igual):
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void str_replace(char **buf, char *src, char *dst)
{
char *t4;
char *t5 = NULL;
if(strstr(*buf,src)){
t5 = (char*)malloc(sizeof(char));
while(strstr(*buf,src)){
t4=strstr(*buf,src);
t5 = (char*)realloc(t5,strlen(t5)+(t4-*buf)+strlen(dst)+1);
strncpy(t5+strlen(t5),*buf,t4-*buf);
strcat(t5,dst);
t4+=strlen(src);
*buf=t4;
}
t5 = (char*)realloc(t5,strlen(t5)+strlen(t4)+1);
*buf = strcat(t5,t4);
}
}
muchas gracias por todo xP
---
Diego Alejandro
Más información sobre la lista de distribución Cconclase