Buenas,
He estado buscando información y lo que más me ha convencido es este código de Ferchu, que es justo lo que necesito, separar por una palabra, no solo un carácter:
#include <stdio.h>
#include <windows.h>
int separar(char ***vector, char *cadena, char *buscada);
int main(int argc, char *argv[])
{
char frase[]="Holasss999 como estas 999freeze??? 999 :p999a999b999999c999d99aaaa999";
char **palabras;
int cant,i;
cant = separar(&palabras,frase,"999");
for(i=0;palabras[i];i++)printf("%s\n",palabras[i]);
system("PAUSE");
return EXIT_SUCCESS;
}
int separar(char ***vector, char *cadena, char *buscada){
char **palabras;
int tam,i,iant=0,n=0,cantidad=1;
int tamtotal,tamfrase;
tamtotal=strlen(cadena);
tam=strlen(buscada);
// recorro primero una vez para contar las partes, para no complicarla con realloc.
for(i=0;i<tamtotal;i++){
while((cadena[i+n]==buscada[n])&&(n<tam))n++;
if(n==tam)cantidad++;
n=0;
}
palabras=(char **)malloc(cantidad * sizeof(char **));
cantidad=0;
for(i=0;i<tamtotal;i++){
while((cadena[i+n]==buscada[n])&&(n<tam))n++;
if(n==tam){
tamfrase=i-iant;
palabras[cantidad]=(char*)malloc(tamfrase);
memcpy(palabras[cantidad],&cadena[iant],tamfrase);
palabras[cantidad][i-iant]=0;
iant=i+tam;
cantidad++;
i=i+tam;
}
n=0;
}
tamfrase=i-iant;
palabras[cantidad]=(char*)malloc(tamfrase);
memcpy(palabras[cantidad],&cadena[iant],tamfrase);
palabras[cantidad][tamfrase]=0;
palabras[cantidad+1]=0;
*vector=palabras;
return cantidad;
}
El problema es que al usar la función Separar me da cuelgues aleatorios.
Los cuelgues me los da al usarla para filtrar conexiones html, buscando cadenas en el protocolo.
La verdad no se porque, si alguien le ve el fallo...