文章目录

  • 一、二级指针案例 ( 返回自定义二级指针 )
  • 二、完整代码示例

一、二级指针案例 ( 返回自定义二级指针 )


上一篇博客 【C 语言】二级指针案例 ( 字符串切割 | 返回 二维数组 作为结果 ) 中 , 使用的是二维数组 , 接收字符串切割结果 ;

本篇博客中 , 使用了 自定义的二级指针内存 , 存放分割后的数组 ;

首先 , 先定义二级指针 ;

    // 存放分割结果, 此处自定义 二级指针 内存结构char **p = NULL;

然后 , 二级指针 指向 若干 一级指针 变量所在的内存 , 这里 申请 堆内存 , 存放 333 个 一级指针 变量 , 如果内存分配失败 , 直接退出 ;

    // 初始化 一维指针 变量 内存p = (char **)malloc(3 * sizeof(char *));// 内存分配失败 退出if (p == NULL){return -1;}

最后 , 为每个 一级指针 分配对应的 444 字节堆内存 , 用于存放实际的 字符串 数据 ;

    // 为每个 一维指针 分配 4 字节内存for (i = 0; i < count; i++){p[i] = (char *)malloc(4 * sizeof(char));}

代码示例 :

    // 存放分割结果, 此处自定义 二级指针 内存结构char **p = NULL;// 初始化 一维指针 变量 内存p = (char **)malloc(3 * sizeof(char *));// 内存分配失败 退出if (p == NULL){return -1;}// 为每个 一维指针 分配 4 字节内存for (i = 0; i < count; i++){p[i] = (char *)malloc(4 * sizeof(char));}

二、完整代码示例


完整代码示例 :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>/*** @brief split_str 分割字符串* @param str 要分割的字符串* @param c 分割依据* @param p 将分割结果写入该二级指针内存* @param count 分割了多少份* @return*/
int split_str(const char *str, char c, char **p, int *count)
{// 用于接收 str 参数char *p1 = NULL, *p2 = NULL;// 临时变量int tmpcount = 0;// p1 , p2 初始化p1 = str;p2 = str;do{// 字符串中, 查找 字符 ','// 找到后 , 返回 逗号 第一次出现的指针p1 = strchr(p1, c);if (p1 != NULL){// 将 p1 指针 与 p2 指针之间的 字符拷贝出来// 这就是分割后的字符串if (p1 - p2 > 0){// 将 p2 后的 p1 - p2 个字符// 拷贝到数组中strncpy(p[tmpcount], p2,  p1 - p2);// 实际的字符拷贝完成后 , 再将 '\0' 字符拷贝过去p[tmpcount][p1-p2]  = '\0';// 拷贝完成后 , 字符tmpcount ++;// p2 和 p1 都设置为 指向 逗号后面字符// 重新开始查找 逗号 并分割p2 = p1 = p1 + 1;}}else{// 如果 p1 为 NULL , 说明没有找到逗号字符 , 退出循环即可break;}} while (*p1 != '\0');*count = tmpcount;return 0;
}/*** @brief 主函数入口* @return*/
int main()
{// 存放返回值int ret = 0;// 字符串分割的份数int count = 4;// 按照逗号分割char split = ',';// 字符串char *str = "12,ab,345,";// 循环控制变量int i = 0;// 存放分割结果, 此处自定义 二级指针 内存结构char **p = NULL;// 初始化 一维指针 变量 内存p = (char **)malloc(3 * sizeof(char *));// 内存分配失败 退出if (p == NULL){return -1;}// 为每个 一维指针 分配 4 字节内存for (i = 0; i < count; i++){p[i] = (char *)malloc(4 * sizeof(char));}// 分割字符串ret = split_str(str, split, p, &count);// split_str 方法执行失败if(ret != 0){printf("split error!\n");return ret;}// 打印分割结果for(i = 0; i < count; i++){printf("%s\n", p[i]);}// 释放内存// 先释放 num 个 一级指针for(i = 0; i < count; i++){if(p[i] != NULL){free(p[i]);p[i] = NULL;}}// 再释放 二级指针if(p != NULL){free(p);}// 二维指针 置空p = NULL;// 命令行不要退出system("pause");return 0;
}

执行结果 :

【C 语言】二级指针案例 ( 字符串切割 | 返回 自定义二级指针 作为结果 )相关推荐

  1. 【C 语言】二级指针案例 ( 字符串切割 | 返回 自定义二级指针 作为结果 | 每个 一级指针 指向不同大小内存 | 精准分配每个 一级指针 指向的内存大小 )

    文章目录 一.二级指针案例 ( 返回自定义二级指针 | 精准控制内存大小 ) 二.完整代码示例 一.二级指针案例 ( 返回自定义二级指针 | 精准控制内存大小 ) 博客 [C 语言]二级指针案例 ( ...

  2. 【C 语言】二级指针案例 ( 字符串切割 | 返回 二维数组 作为结果 )

    文章目录 一.二级指针案例 ( 返回二维数组 ) 二.完整代码示例 一.二级指针案例 ( 返回二维数组 ) 将 "12,ab,345," 字符串 以 逗号 "," ...

  3. 【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )

    文章目录 一.指针数组 和 二维数组 数据 拷贝到 自定义二级指针 中 1.函数形参 设计规则 2.三种内存模型 对应 函数形参 指针退化规则 二.完整代码示例 一.指针数组 和 二维数组 数据 拷贝 ...

  4. C语言函数怎么像python那样返回多个值?(三种方法:1、设置全局变量 2、传递指针 3、使用结构体返回不同类型的数据)

    引用文章:c语言函数可不可以返回多个值 文章目录 方法一:设置全局变量 例如:利用一个函数求出正方形的周长和面积. 方法二:使用数组名或指针作为函数的形参 实例2:编写函数求一维整形数组的最大值与最小 ...

  5. 【C 语言】二级指针 内存模型图 ( 指针数组 | 二维数组 | 自定义二级指针内存 )

    文章目录 前言 一.指针数组 二.二维数组 三.自定义二维指针内存 前言 绘制如下 333 种二级指针的内存模型 : // I. 指针数组 char *p1 []= {"12", ...

  6. c语言int超出范围字符串,Go返回int64类型字段超出javascript Number范围的解决方法...

    Go返回int64类型字段超出javascript Number范围的解决方法 最近在项目中,一个go服务给前端提供了一个接口,返回json格式数据,其中Int64字段会超出javascript Nu ...

  7. c语言填空题删除字符串k右边,计算机二级C语言上机模拟试题及解题思路

    计算机二级C语言上机模拟试题及解题思路 随着2017年上半年计算机等级考试的临近,百分网小编为大家整理了2017计算机二级C语言上机模拟试题及解题思路,更多计算机等级考试信息请关注应届毕业生考试网. ...

  8. 【C 语言】结构体 ( 结构体中嵌套二级指针 | 为 结构体内的二级指针成员 分配内存 | 释放 结构体内的二级指针成员 内存 )

    文章目录 一.结构体中嵌套二级指针 1.结构体中嵌套二级指针 类型声明 2.为 结构体内的二级指针成员 分配内存 3.释放 结构体内的二级指针成员 内存 二.完整代码示例 一.结构体中嵌套二级指针 1 ...

  9. 【C 语言】字符串模型 ( strstr-while 模型 | 抽象函数模型 | 业务子函数接口定义要点 | 形参指针间接赋值 | 返回值状态 | 形参指针处理 | 形参指针判空 | 形参返回值 )

    文章目录 前言 一.业务子函数接口定义要点 二.完整代码示例 前言 字符串开发模型 : strstr-while/do-while 模型 : 在 字符串 中 查找 子串特征 ; 两头堵模型 : 两个指 ...

最新文章

  1. hdu5489 Removed Interval dp+线段树优化
  2. datatables 自定义按钮及响应点击事件
  3. nifi 实现数据库到数据库之间数据同步
  4. 在Service中发送广播被kill掉的Activity能不能收到?
  5. Windows平台下使用Dokan实现文件系统的开发
  6. vue学习笔记(四)- cmd无法识别vue命令解决方法
  7. 【python教程入门学习】利用Python自动生成暴力破解的字典
  8. 常见物理性能测试仪器设备档案
  9. BLE低功耗蓝牙协议栈
  10. base循环解码工具
  11. 服务器系统补丁失败,windows2008系统更新补丁,以及失败解决方法
  12. WEKA( OneR,过拟合)
  13. VTN系列多通道振弦采集仪数据查看和参数修改
  14. manjaro deepin 闪屏_微信聊天“闪屏”特效,整蛊效果100分!
  15. Python--fractions库【分数、有理数】
  16. 【Java编程练习】司机肇事后逃跑,现场三人半瞎系列
  17. 如何让文本框中文字居中
  18. mysql索引入门-黑马
  19. Python3,我把新年祝福写在“雨“中,你看,雨一直下,气氛还算融洽,在同个屋檐下....
  20. 【模型训练】YOLOv7反光衣检测

热门文章

  1. java jdk缓存-128~127的Long与Integer
  2. linux sudo命令详解
  3. DzzOffice增加应用对扩展名文件的支持设置,将会在Beta中提供。
  4. 管中窥豹,初探Win RE(Windows恢复环境)
  5. 2019区块链广泛应用于能源领域 ,DMA基金会,服务于区块链产业
  6. PHP对redis操作详解
  7. 查询数据(使用聚合函数,还是单表)
  8. 八皇后问题 (递归 搜索)
  9. 正则表达式的学习二:正则表达式的匹配规则总结
  10. Linux查看进程和终止进程的技巧