#include <stdlib.h>#include <string.h>#include <stdio.h>/**//*功能:获取字符串中某指定字符的个数参数:(in)buf:原字符串。 (in)c :某字符。返回值:返回获取的个数。*/int getcnum(char *buf,char c)...{ int i=0; int num=0; for(i;i<strlen(buf);i++) ...{ if(buf[i]==c) ...{num++;} } return num;}/**//*功能:取“*** ***&*** ***&*** ***&…”形式字符串中以‘&’分割开的的所有子串。参数:(in)recvbuf:原字符串。 (out)strs :返回的字符串数组。 (out)n : 字符串数组中包含的字符串的个数。返回值:0:ok ;-1:fail;注意: 注意在外部释放空间。*/int getstrs(char *recvbuf,char ***strs,int *n)...{ char **dest; int num =getcnum(recvbuf,'&');//获取字符串中‘&’的个数 dest =(char **)malloc(sizeof(char*)*(num+1)); if(!dest) ...{ *strs=0; //注意 return -1; } char *sub; int j=0; for(j;j<=num;j++) ...{ int num=0;//对应字符串中的字符个数。 //如果第一个字符是‘&’,就将首地址向后移1位。 if(*recvbuf=='&') ...{ recvbuf++; } sub =recvbuf; recvbuf =strchr(recvbuf,'&'); if(!recvbuf)//如何没有找到,就认为是最后一个子串。把最后一个元素的位置给recvbuf。并跳出循环。 ...{ num =strlen(sub); dest[j] = (char*)malloc(num+1); strcpy(dest[j],sub); } else ...{ num =recvbuf - sub; dest[j] = (char*)malloc(num+1); strncpy(dest[j],sub,num); } dest[j][num]=0; //printf("dest[%d] = %s ",j,dest[j]); *strs =dest; } *n =j; return 0;}int main()...{ char *recvbuf="111 5gh 111&22fddf 2 222&333 3ff 33&444 fff ff"; char **strs; int n; getstrs(recvbuf,&strs,&n); int i=0; for(i;i<n;i++) ...{ printf("%s ",strs[i]); }}