#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>//申請二維數組char **new2arr(int v,int h){char **dest;int i=0;assert(v>0 && h>0);dest=(char **)malloc(sizeof(char*)*v);for(i=0;i<v;++i){dest[i]=(char*)malloc(sizeof(char)*(h+1)); //加一位儲存'\0'}return dest;}//釋放二級數組void free2arr(char **src,int v,int h){int i=0;for(i=0;i<v;++i){free(src[i]);}free(src);}/** * src源字串,delimiter分隔字元,pvlen用返回,二維數組的維數,phlen 每維元素的個數 */char** strsplit(const char* src,const char* delimiter,int *pvlen,int *phlen){int hlen=0,vlen=0,i=0;char *p=src,*q=NULL,**dest;if(src==NULL || delimiter==NULL || *src=='\0' || delimiter=='\0') return NULL;while( (q=strstr(p,delimiter)) || (q=strchr(p,'\0')) ){++vlen;if(hlen<q-p) hlen=q-p;if(*q=='\0') break;p=++q;}dest=new2arr(vlen,hlen);p=src;i=0;while((q=strstr(p,delimiter)) || (q=strchr(p,'\0')) ){memcpy(dest[i],p,sizeof(char)*(q-p));dest[i++][q-p]='\0';if(*q=='\0') break;p=++q;}*pvlen=vlen;*phlen=hlen;return dest;}int main(void) {int hlen,vlen,i;char **dest=strsplit("ab cde figh io"," ",&vlen,&hlen);for(i=0;i<vlen;++i){puts(dest[i]);}free2arr(dest,vlen,hlen);return 0;}