#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/**
* 打印数组
* @brief printfArray
* @param array
* @param size
*/
void printfArray(const char** array,int size){
for(int i=0;i<size;i++){
printf("%s\n",*(array+i));
}
}
/**
* 释放内存
* @brief freeAll
* @param array
* @param size
*/
void freeAll(char*** array,int size){
if(array==NULL)
return;
char** arr=*array;
if(arr==NULL)
return;
for(int i=0;i<size;i++){
free(arr[size]);
arr[size]=NULL;
}
free(arr);
arr=NULL;
printf("free success!\n");
}
/**
* 分割字符串
* @brief split
* @param str 被分割的字符串
* @param c 分割字符
* @param size 被分割后生成的数组长度
* @return 分割好的数组
*/
char** split(const char* str,const char c,int* const size){
if(str==NULL||c==NULL||size==NULL){
printf("err:str==NULL||c==NULL||size==NULL\n");
return NULL;
}
int flag=0;
int arr_size=0;
char *p=NULL;
char *tempp=NULL;
p=tempp=str;
do{
p=strchr(p,c);
if(p!=NULL&&p>tempp){
arr_size++;
tempp=p=p+1;
}else{
arr_size++;
break;
}
}while(*p!='\0');
*size=arr_size;
char** result=(char**)malloc(arr_size*sizeof(char*));
if(result==NULL){
return NULL;
}
p=tempp=str;
arr_size=0;
do{
p=strchr(p,c);
if(p!=NULL&&p>tempp){
int length=p-tempp+1;
*(result+arr_size)=(char*)malloc(length);
if(*(result+arr_size)==NULL){
flag=-1;
goto END;
}
strncpy(*(result+arr_size),tempp,length-1);
strcat(*(result+arr_size),"\0");
arr_size++;
tempp=p=p+1;
}else{
int length= strlen(tempp);
*(result+arr_size)=(char*)malloc(length);
if(*(result+arr_size)==NULL){
flag=-1;
goto END;
}
strcpy(*(result+arr_size),tempp);
arr_size++;
break;
}
}while(*p!='\0');
END:
if(flag!=0)
{
freeAll(&result,arr_size);
}
return result;
}
int main(int argc, char *argv[])
{
char* str="123,456,789,101112,131415,relikang,";
int arr_size;
char** result =split(str,',',&arr_size);
printf("arr_size=%d\n",arr_size);
printfArray(result,arr_size);
freeAll(&result,arr_size);
return 0;
}