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


    #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!='');
    
        *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]='';
                    tmpcount ++;
                    //3重新 让p和ptmp达到下一次检索的条件
                    pTmp = p = p + 1;
                }
            }
            else
            {
                break;
            }
        } while (*p!='');
    
    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 
    ",ret);
            return ret;
        }
    
        for(i=0;i<nCount;i++)
        {
            printf("%s 
    ",p[i]);
        }
    
        for(i=0;i<nCount;i++)
        {
            free(p[i]);
        }
        free(p);
    
        printf("%d 
    ",nCount);
        printf("hello...
    ");
        system("pause");
    
    }
    Stay hungry,Stay foolish
  • 相关阅读:
    MySQL备份与恢复(5)mysqldump的关键参数说明
    MySQL备份与恢复(4)mysqldump备份表
    MySQL备份与恢复(3)mysqldump备份多个库
    MySQL备份与恢复(2)mysqldump多个命令参数
    MySQL备份与恢复(1)意义及重要性
    Redis(二)
    Redis(一)
    前端像素单位之间的区别
    Matplotlib
    解决问题:[Vue warn]: Error in beforeUpdate hook: "TypeError: Cannot read property 'setAttribute' of undefined"
  • 原文地址:https://www.cnblogs.com/zhesun/p/5008463.html
Copyright © 2020-2023  润新知