[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