您的位置:首页 > 其它

C提高_day03_两个辅助指针变量挖字符串(强化4)

2015-11-30 21:30 295 查看
#define  _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

//两个辅助指针变量挖字符串, 的第三种内存模型

//指针做函数参数

void FreeMem(char **myp,int count)   //释放内存函数
{
int i=0;
if(myp == NULL)
{
return;
}
for(i=0;i<count;i++)
{
if(myp[i] != NULL)
{
free(myp[i]);
}
}
if(myp != NULL)
{
free(myp);
}
}

int spitString4(char *buf1,char c,char ***myp3,int *count)    //**pp二级指针做输入
{
int ret =0;
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)
{
ret=-1;
printf("func spitSpring4() err :%d malloc(tmpcount * sizeof(char *))",ret);
goto END;
//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;
ret=-1;
printf("func spitSpring4() err :%d malloc(tmpcount * sizeof(char *))",ret);
goto END;
}
strncpy(myp[tmpcount],pTmp,p-pTmp);
myp[tmpcount][p-pTmp]='\0';
tmpcount ++;
//3重新 让p和ptmp达到下一次检索的条件
pTmp = p = p + 1;
}
}
else
{
break;
}
} while (*p!='\0');

END:
if(ret != 0) //失败
{
FreeMem(myp,*count);
}
else
{
*myp3 = myp;   //成功
}
return ret;

}

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");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: