#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]);
}
}
#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]);
}
}