您的位置:首页 > 其它

关于返回字符串数组的示例

2007-08-30 17:34 344 查看

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


}


}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: