美文网首页
二级指针的应用

二级指针的应用

作者: 76577fe9b28b | 来源:发表于2017-02-28 11:06 被阅读35次
题目:字符串的拆分,有字符串"aasa,asd,sad,",按照','拆分
  • 方案一:在栈中创建一个数组,接收拆分后的结果
 /*
    src:要拆分的字符串
    split:拆分依据
    dst:拆分后存放的位置
    num:拆分字符串的个数
 */
int split_string1(IN const char *src, IN char *split,OUT char (*dst)[100], OUT int *num){

    if (src == NULL || split == NULL || dst == NULL || num == NULL ) {
        return -1;
    }
    
    int index = 0;
    const char *p  = src;
    const char *q  = src;
    while ((p = strchr(p, *split)) != NULL) {
        
        strncpy(*(dst +index), q, p - q);
        p = p + 1;
        q = p;
        index++;
    }
    
    if (*q != '\0') {
        strcpy(*(dst + index++), q);
    }
    
    *num = index;
    return  0;
}

  • 方案二:在栈中创建一个数组,接收拆分后的结果
//在堆区创建数组
int split_string2(IN const char *src, IN char *split,OUT char ***dst, OUT int *num){

    int flag = 0;
    
    if (src == NULL || split == NULL || dst == NULL || num == NULL ) {
        
        flag =  -1;
    }
    
    //先计算num
    const char *p = src;
    int index = 0;
    while ((p = strchr(p, *split)) != NULL) {
        
        index ++;
        p = p +1;
    }
    
    if (*(src + strlen(src) - 1) != *split) {
        
        index++;
    }
  
    *num = index;
    //开辟堆数组
    *dst = calloc(index, sizeof(char*));
    if (*dst == NULL) {
        
        fprintf(stderr, "开辟内存错误");
        flag =  -1;
    }
    
    const char *q = src;
    p = src;
    index = 0;
    while ((p = strchr(p, *split))) {
        //后面有一个 '\0'
        *(*dst + index)  = calloc( p -q + 1, sizeof(char));
        
        if (*(*dst + index) == NULL) {
            
            fprintf(stderr, "开辟内存错误");
            flag =  -1;
            goto END;
        }
        
        strncpy(*(*dst + index++), q, p - q);
        p = p + 1;
        q = p;
    }
    
    if (*q != '\0') {
        //后面有一个 '\0'
        *(*dst + index)  = calloc( strlen(q) + 1, sizeof(char));
        
        if (*(*dst + index) == NULL) {
            
            fprintf(stderr, "开辟内存错误");
            flag =  -1;
            goto END;
        }
        strcpy(*(*dst + index++), q);
    }
    
END:
    if (flag == -1) {
        free_two_point(dst, *num);
    }
    
    return flag;
}

注意:使用后要释放内存

int free_two_point(char ***p, int num){
    
    if (p == NULL) {
        return  -1;
    }

    for (int i = 0; i < num; i++) {
        
        if ((*p)[i] != NULL) {
            free((*p)[i]);
        }
    }
    
    *p = NULL;
    return  0;
}

相关文章

  • 二级指针应用

    使用指向指针的指针

  • 二级指针的应用

    题目:字符串的拆分,有字符串"aasa,asd,sad,",按照','拆分 方案一:在栈中创建一个数组,接收拆分后...

  • 二级指针

    关于二级指针,可以参考这篇文章[二级指针的作用详解] 所谓二级指针可以理解为:指向指针的指针函数通常会将参数拷贝一...

  • C++ 指针与二维数组

    一级指针 二级指针

  • C语言学习笔记——指针(二级指针和n级指针)

    今天学习了C语言中的二级指针和n级指针,总结如下: 另外,二级指针也可通过一级指针实现: 具体两种方法的差别请看我...

  • 02-C语言的指针

    02-C语言的指针 目标 C语言指针释义 指针用法 指针与数组 指针与函数的参数 二级指针 函数指针 指针在C中很...

  • 指针(2)二级指针

    二级指针 :指向指针的指针先看一段代码 p2存储了一级指针p1的内存地址 所以p2就是二级指针,同理p3储存了p...

  • C语言基础及指针④函数指针

    接续上篇C语言基础及指针③函数与二级指针 在上一篇中 , 我们学习了函数与二级指针 , 函数和java中的方法类似...

  • * 与 & 以及二级指针

    *: 星号,用来声明指针的; &:连字号运算符,定义内存位置; 二级指针:指向指针的指针。 指针 指针是一个变量,...

  • C语言指针部分说明

    二级指针 函数指针 数组和链表 访问数组 访问链表 Makefile

网友评论

      本文标题:二级指针的应用

      本文链接:https://www.haomeiwen.com/subject/fhkxgttx.html