char **split(char *string,char delim) { char **a=NULL,*pch=NULL; int element=0,i=0,z=0; if((a=(char **)malloc(sizeof(char *)))==NULL) return NULL; pch=strchr(string,delim); //we do this to catch the first element if(pch!=NULL) { a[element] =(char *) malloc(1); z=0; for(i=0;i<=(pch-string+1);i++) { if((a[element]=(char *)realloc(a[element],sizeof(char *)*(z+1)))==NULL) return NULL; if(string[i]==delim) { a[element][z]='\0'; break; } a[element][z]=string[i]; z++; } element++; //cycle through the rest while (pch!=NULL) { a=(char **)realloc((char *)a,sizeof(char *) * (element+1)); if((a[element] =(char *) malloc(1))==NULL) return NULL; z=0; for(i=(pch-string+1);i<=strlen(string);i++) { if((a[element]=(char *)realloc(a[element],sizeof(char *)*(z+1)))==NULL) return NULL; if(string[i]==delim) { a[element][z]='\0'; element++; break; } a[element][z]=string[i]; z++; } pch=strchr(pch+1,delim); } // just allocate a little more so we can while it ok element++; if((a=(char **)realloc((char *)a,sizeof(char *) * (element+1)))==NULL) return NULL; a[element]=NULL; return (char **)a; } return NULL; }