怎么分割字符串

如何分割字符串
如下字符串:
1234abcd:abc:5678:abc:cdefgacd:abc:gggg
以:abc:为分割符,
如何取出
1234abcd
5678
cdefgacd
gggg
呢?
用strtok不行啊,会把其它有用的字符也转成\0了
怎么办啊?

------解决方案--------------------
不具有一般性:
sscanf(str, "%[^:]:abc:%[^:]:abc:%[^:]:abc:%s ", str1, str2, str3, str4);
------解决方案--------------------
用 strstr 自己写吧
------解决方案--------------------

> 用 strstr 自己写吧

同一,做起来也不那么复杂。
------解决方案--------------------
楼主看我的程序怎么样吧。

#include <stdio.h>
#include <string.h>

int main()
{
char str[]= "1234abcd:abc:5678:abc:cdefgacd:abc:gggg ";
char *sp1, *sp2;
int i;
//i=strlen(str);
sp1=strstr(str, ":abc: ");
sp2=str;
for(;sp1!=NULL;)
{
for(i=0;i <sp1-sp2;i++)
printf( "%c ", sp2[i]);
printf( "\n ");
sp1+=5;
sp2=sp1;
sp1=strstr(sp2, ":abc: ");
}
printf( "%s\n ", sp2);

return 0;
}
------解决方案--------------------
就用zjq9931(问天) 的把
------解决方案--------------------
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
char *ptr= ":abc:1234abcd:abc::abc:5678:abc:cdefgacd:abc:gggg:abc: ";
char *ptr2= ":abc: ";
char *str1,*str2,*str3;
int len=0,total=0;
str1=ptr;
if(strncmp(str1,ptr2,strlen(ptr2))==0)
str1+=strlen(ptr2);
while(str2=strstr(str1,ptr2))
{
len=strlen(str1)-strlen(str2);
str3=(char *)malloc(len+1);
memset(str3,0,len+1);
strncpy(str3,str1,len);
printf( "%s\n ",str3);
str1=str2;
str1+=strlen(ptr2);
free(str3);
}
if(*str1!=0)
printf( "%s\n ",str1);
}