标签:
#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> //两个辅助指针变量挖字符串, 的第三种内存模型 //指针做函数参数 int spitString4(char *buf1,char c,char ***myp3,int *count) //**pp二级指针做输入 { char *p=NULL, *pTmp = NULL; int tmpcount = 0; int len; char **myp=NULL; //1 p和ptmp初始化 p = buf1; pTmp = buf1; //第一遍求出count do { //2 检索符合条件的位置 p后移 形成差值 挖字符串 p = strchr(p, c); if (p != NULL) { if (p-pTmp > 0) { tmpcount ++; //3重新 让p和ptmp达到下一次检索的条件 pTmp = p = p + 1; } } else { break; } } while (*p!=‘\0‘); *count = tmpcount; //根据多少行精确分配内存 myp=(char **)malloc(tmpcount * sizeof(char *)); if(myp==NULL) { return -1; } ///////////////////////////////////////////////////////// tmpcount=0; //1 p和ptmp初始化 p = buf1; pTmp = buf1; do { //2 检索符合条件的位置 p后移 形成差值 挖字符串 p = strchr(p, c); if (p != NULL) { if (p-pTmp > 0) { len=p-pTmp+1; myp[tmpcount]=(char *)malloc(len * sizeof(char)); if(myp==NULL) { return -1; } strncpy(myp[tmpcount],pTmp,p-pTmp); myp[tmpcount][p-pTmp]=‘\0‘; tmpcount ++; //3重新 让p和ptmp达到下一次检索的条件 pTmp = p = p + 1; } } else { break; } } while (*p!=‘\0‘); //*count = tmpcount; *myp3 = myp; //myp3是二级指针地址的值 return 0; } int main() { int i; int ret=0 ; char *p1="abcdef,aaa,eeeee,ffffff,a3a3a3,"; char tmp=‘,‘; char **p=NULL; int nCount; ret=spitString4(p1,tmp,&p,&nCount); if(ret!=0) { printf("fun spiltString() err:%d \n",ret); return ret; } for(i=0;i<nCount;i++) { printf("%s \n",p[i]); } for(i=0;i<nCount;i++) { free(p[i]); } free(p); printf("%d \n",nCount); printf("hello...\n"); system("pause"); }
标签:
原文地址:http://www.cnblogs.com/zhesun/p/5003826.html