goto,END

来源:互联网 发布:超星校园阅读软件 编辑:程序博客网 时间:2024/05/01 07:10
#define  _CRT_SECURE_NO_WARNINGS #include <stdlib.h>#include <string.h>#include <stdio.h>//有一个字符串符合以下特征(”abcdef,acccd,eeee,aaaa,e3eeeee,sssss,";)//分清楚赋值指针变量 和 操作逻辑之间的关系char ** spitString3(const char *buf1, char c, int *count){char *p=NULL, *pTmp = NULL;inttmpcount = 0;char **myp = NULL;//1 p和ptmp初始化p = buf1;pTmp = buf1;//第一遍求出countdo {//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 NULL;}//////////////////////////////////////////////////////////////////////////tmpcount = 0;//1 p和ptmp初始化p = buf1;pTmp = buf1;do {//2 检索符合条件的位置 p后移  形成差值 挖字符串p = strchr(p, c);if (p != NULL){if (p-pTmp > 0){int len = p - pTmp + 1;myp[tmpcount] = (char *)malloc(len * sizeof(char));if (myp[tmpcount] == NULL){return NULL;}strncpy(myp[tmpcount], pTmp,  p-pTmp);myp[tmpcount][p-pTmp]  = '\0';  //把第一行数据变成 C风格字符串tmpcount ++;//3重新 让p和ptmp达到下一次检索的条件pTmp = p = p + 1;}}else{break;}} while (*p!='\0');//*count = tmpcount;return myp;}void FreeMem2(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);}}void FreeMem3(char ***p, int count){int i =0; char **myp = NULL;if (p == NULL){return;}myp = *p;if (myp == NULL) {return ;}for (i=0; i<count; i++){if (myp[i] != NULL){free(myp[i]);}}if (myp != NULL){free(myp);}*p = NULL; //把实参二级指针 ,修改成NULL}//分清楚赋值指针变量 和 操作逻辑之间的关系int  spitString4(const char *buf1, char c, char ***myp3, int *count){int ret = 0;char *p=NULL, *pTmp = NULL;inttmpcount = 0;char **myp = NULL;//1 p和ptmp初始化p = buf1;pTmp = buf1;//第一遍求出countdo {//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 spitString4() err:%d  (tmpcount * sizeof(char *) )", ret);goto END;//return -1;}memset(myp, 0, tmpcount * sizeof(char *));//////////////////////////////////////////////////////////////////////////tmpcount = 0;//1 p和ptmp初始化p = buf1;pTmp = buf1;do {//2 检索符合条件的位置 p后移  形成差值 挖字符串p = strchr(p, c);if (p != NULL){if (p-pTmp > 0){int len = p - pTmp + 1;myp[tmpcount] = (char *)malloc(len * sizeof(char));if (myp[tmpcount] == NULL){ret = -2;printf("func spitString4() err:%d  malloc(len * sizeof(char) )", ret);goto END;}strncpy(myp[tmpcount], pTmp,  p-pTmp);myp[tmpcount][p-pTmp]  = '\0';  //把第一行数据变成 C风格字符串tmpcount ++;//3重新 让p和ptmp达到下一次检索的条件pTmp = p = p + 1;}}else{break;}} while (*p!='\0');END:if (ret != 0) //失败{//FreeMem2(NULL, *count ); //myp= NULL;FreeMem3(&myp, *count);}else{*myp3 = myp;  //成功}return ret;}//多级指针 避免野指针 void main93(){int ret = 0, i = 0;char *p1 = "abcdef,acccd,";char cTem= ',';int nCount;char **p = NULL;  //char buf[10][30]p= spitString3(p1, cTem, &nCount);if (p == NULL){printf("fucn spitString() 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("hello...\n");system("pause");return ;}void main(){int ret = 0, i = 0;char *p1 = "abcdef,acccd,";char cTem= ',';int nCount;char **p = NULL;  //char buf[10][30]ret = spitString4(p1, cTem, &p,  &nCount);if (ret != 0){printf("fucn spitString() 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("hello...\n");system("pause");return ;}//作业1 用第三种内存模型求解问题/*int spitString2(const char *buf1, char c, char ***pp, int *count){}char ** spitString3(const char *buf1, char c, int *count){}*/

0 0
原创粉丝点击