#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct
{
char *str;
}str_every;
typedef struct
{
int num;
str_every *strbuf;
}o_str;
int analysis_string(char *in_str,o_str *on_str,char ch,int len);
int analysis_string_free(o_str *on_str);
int main () {
char *in_str = "222.222.222.222:30041";
char *in_str_1 = "222.222.2.2:30041";
int ret=0;
int i;
o_str out_str;
char test[32] = {0};
ret = analysis_string(in_str,&out_str,':',strlen(in_str));
printf("ret = %d\n",ret);
for(i=0;i<ret;i++)
{
printf("%s",out_str.strbuf[i].str);
printf("\n");
}
memcpy(test,out_str.strbuf[0].str,strlen(out_str.strbuf[0].str));
printf("%s\n",test);
printf("%d\n",strlen(test));
analysis_string_free(&out_str);
printf("***************************************\n");
ret = analysis_string(in_str_1,&out_str,':',strlen(in_str));
printf("ret = %d\n",ret);
memcpy(test,out_str.strbuf[0].str,strlen(out_str.strbuf[0].str));
printf("%s\n",out_str.strbuf[0].str);
printf("%d\n",strlen(out_str.strbuf[0].str));
analysis_string_free(&out_str);
return 0;
}
int analysis_string(char *in_str,o_str *on_str,char ch,int len)
{
int i=0,j=0,k=0;
for(i=0;i<len;i++)
{
if(in_str[i] == ch)
{
if(i != 0)
{
j++;
}
continue;
}
}
on_str->num = j+1;
on_str->strbuf = (str_every *)malloc(sizeof(str_every)*(on_str->num));
if(on_str->strbuf == NULL)
{
return -1;
}
memset(on_str->strbuf,0,sizeof(str_every)*(on_str->num));
j=0;
k=0;
for(i=0;i<len;i++)
{
if(in_str[i] == ch)
{
if(i != 0)
{
on_str->strbuf[j].str = (char *)malloc(sizeof(char)*(i-k+1));
if(on_str->strbuf[j].str == NULL)
{
return -1;
}
memset(on_str->strbuf[j].str,0,sizeof(char)*(i-k+1));
j++;
}
continue;
}
}
on_str->strbuf[j].str = (char *)malloc(sizeof(char)*(i-k+1));
if(on_str->strbuf[j].str == NULL)
{
return -1;
}
memset(on_str->strbuf[j].str,0,sizeof(char)*(i-k+1));
j=0;
k=0;
for(i=0;i<len;i++)
{
if(in_str[i] == ch)
{
if(i != 0)
{
k=0;
j++;
}
continue;
}
on_str->strbuf[j].str[k] = in_str[i];
k++;
}
return (j+1);
}
int analysis_string_free(o_str *on_str)
{
int i=0;
if(on_str == NULL)
{
return 0;
}
if(on_str->strbuf == NULL)
{
return 0;
}
for(i=0;i<on_str->num;i++)
{
if(on_str->strbuf[i].str != NULL)
{
free(on_str->strbuf[i].str);
on_str->strbuf[i].str == NULL;
}
}
free(on_str->strbuf);
on_str->strbuf = NULL;
return 0;
}