#include <iostream> #include <string> #include <windows.h> using namespace std; char ** cutStringT(char * p,char c,int *n) { char *a = p;//定义一个头指针 char *b = p;//定义一个末尾指针 int count = 0;//每段字符串计数 char **arr = (char **)malloc(10 * sizeof(char *));//在堆分配十个地址空间 //遍历 直到字符串最后 while (*a != '\0' && *n <= 10) { b = strchr(a, c);//获取char c的指针 if (b == NULL) break;//找不到则退出循环 count = strlen(a) - strlen(b);//计算得出要存储的字符数 arr[*n] = (char *)malloc(count * sizeof(char) + 1);//在堆分配对应大小的内存空间 多一个分配给结束符 memcpy(arr[*n], a, count);//复制字符串 arr[*n][count] = '\0';//添加结束字符串 a = b + 1;//定义新的头指针 *n = *n+1;//多一个 } return arr; } void main() { char str[] = "zxc,asd,xdasd,cfasd,";//要转化的字符串 int n = 0;//包含个数 char **p = cutStringT(str,',', &n);//调用方法返回二级指针 //打印 for (int i = 0; i < n; i++) { cout << p[i] << endl; } //释放内存 for (int i = 0; i < n; i++) { free(p[i]); } free(p); system("pause"); }