文章目录
- 一、二级指针案例 ( 返回自定义二级指针 )
- 二、完整代码示例
一、二级指针案例 ( 返回自定义二级指针 )
上一篇博客 【C 语言】二级指针案例 ( 字符串切割 | 返回 二维数组 作为结果 ) 中 , 使用的是二维数组 , 接收字符串切割结果 ;
本篇博客中 , 使用了 自定义的二级指针内存 , 存放分割后的数组 ;
首先 , 先定义二级指针 ;
代码语言:javascript复制 // 存放分割结果, 此处自定义 二级指针 内存结构
char **p = NULL;
然后 , 二级指针 指向 若干 一级指针 变量所在的内存 , 这里 申请 堆内存 , 存放
个 一级指针 变量 , 如果内存分配失败 , 直接退出 ;
代码语言:javascript复制 // 初始化 一维指针 变量 内存
p = (char **)malloc(3 * sizeof(char *));
// 内存分配失败 退出
if (p == NULL)
{
return -1;
}
最后 , 为每个 一级指针 分配对应的
字节堆内存 , 用于存放实际的 字符串 数据 ;
代码语言:javascript复制 // 为每个 一维指针 分配 4 字节内存
for (i = 0; i < count; i )
{
p[i] = (char *)malloc(4 * sizeof(char));
}
代码示例 :
代码语言:javascript复制 // 存放分割结果, 此处自定义 二级指针 内存结构
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));
}
二、完整代码示例
完整代码示例 :
代码语言:javascript复制#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);
// 实际的字符拷贝完成后 , 再将 '