Paste
#79051: 字符串分割函数
char** string_split(char *url,char sp,int *ret) //分割字符串,返回二维字符串表
{
int i=0,j=0,sum_of_sp=0,i_max=strlen(url); //i,j用于循环基数,sum_of_sp记录 '&' 的个数,i_max字符串的长度
int *index_list=NULL;
char **res=NULL;
for(i=0;i<i_max;i++){if(url[i]==sp)sum_of_sp++;} //计算'&' 个数有4个&则sum_of_sp=4
index_list=(int*)malloc(sizeof(int)*(sum_of_sp+1)); //储存分割偏移量表index_list 比sum_of_sp多1,用于储存结束位置
for(i=0,j=0;i<=i_max;i++) //遍历url,记录偏移量到index_list
{
if(url[i]==sp || url[i]=='\0')
{
index_list[j]=i;
j++;
}
}
res=(char**)malloc(sizeof(char*)*(sum_of_sp+2)); //生成储存字段的二维表头
res[0]=(char*)malloc(sizeof(char)*(index_list[0]+1));
printf("%d\n",index_list[0]);
strncpy(res[0],url,index_list[0]);
printf("%s",res[index_list[0]]);
res[index_list[0]]='\0';
//printf("%s \n",res[0]);
for(i=1;i<=sum_of_sp;i++)
{
printf("hi\n");
res[i]=NULL;
printf("%d\n",index_list[i]-index_list[i-1]);
res[i]=(char*)malloc(sizeof(char)*(index_list[i]-index_list[i-1]));
strncpy(res[i],url+index_list[i-1]+1,index_list[i]-index_list[i-1]-1); //复制字符
//printf("%s \n",res[i]);
}
*ret=sum_of_sp+1;
free(index_list); //释放偏移量表
return res;
}