二级指针第三种内存模型
2015-08-27 11:04
253 查看
二级指针第三种内存模型
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int spitString(const char *string, char c, char **mypp, int *num)
{
char *p = NULL;
char *tmp = NULL;
int ncount = 0;
if (string == NULL || num == NULL)
{
return -1;
}
p = string;
tmp = string;
do
{
p = strchr(p, ',');
if (p == NULL)
{
break;
}
else
{
strncpy(mypp[ncount], tmp, p - tmp);
mypp[ncount][p - tmp] = '\0';
ncount++;
tmp = p = p + 1;
}
} while (*p!='\0');
*num = ncount;
return 0;
}
char **getMem(int num)
{
int i = 0;
char **pp = (char **)calloc(num,sizeof(char *));
if (pp == NULL)
{
return -1;
}
for (i = 0; i < num; i++)
{
pp[i] = (char *)calloc(100,sizeof(char));
if (pp[i] == NULL)
{
return -1;
}
}
return pp;
}
char **freeMem(char **pp, int num)
{
int i = 0;
for (i = 0; i < num; i++)
{
free(pp[i]);
}
free(pp);
}
int main()
{
int i = 0;
int ret = 0;
int numarray = 10;
const char *buf1 = {"China,is,so,great,"};
char c = ',';
char **pp = NULL;
pp = getMem(numarray);
if (pp == NULL)
{
ret= -1;
printf("func getMem() err:%d\n", ret);
goto End;
}
int num = 0;
ret=spitString(buf1,c,pp,&num);
if (ret != 0)
{
printf("func spitString() err:%d\n",ret);
return ret;
goto End;
}
printf("%d\n",num);
for (i = 0; i < num; i++)
{
printf("%s\n",pp[i]);
}
End:
if (pp != NULL)
{
freeMem(pp,numarray);
}
system("pause");
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int spitString(const char *string, char c, char **mypp, int *num)
{
char *p = NULL;
char *tmp = NULL;
int ncount = 0;
if (string == NULL || num == NULL)
{
return -1;
}
p = string;
tmp = string;
do
{
p = strchr(p, ',');
if (p == NULL)
{
break;
}
else
{
strncpy(mypp[ncount], tmp, p - tmp);
mypp[ncount][p - tmp] = '\0';
ncount++;
tmp = p = p + 1;
}
} while (*p!='\0');
*num = ncount;
return 0;
}
char **getMem(int num)
{
int i = 0;
char **pp = (char **)calloc(num,sizeof(char *));
if (pp == NULL)
{
return -1;
}
for (i = 0; i < num; i++)
{
pp[i] = (char *)calloc(100,sizeof(char));
if (pp[i] == NULL)
{
return -1;
}
}
return pp;
}
char **freeMem(char **pp, int num)
{
int i = 0;
for (i = 0; i < num; i++)
{
free(pp[i]);
}
free(pp);
}
int main()
{
int i = 0;
int ret = 0;
int numarray = 10;
const char *buf1 = {"China,is,so,great,"};
char c = ',';
char **pp = NULL;
pp = getMem(numarray);
if (pp == NULL)
{
ret= -1;
printf("func getMem() err:%d\n", ret);
goto End;
}
int num = 0;
ret=spitString(buf1,c,pp,&num);
if (ret != 0)
{
printf("func spitString() err:%d\n",ret);
return ret;
goto End;
}
printf("%d\n",num);
for (i = 0; i < num; i++)
{
printf("%s\n",pp[i]);
}
End:
if (pp != NULL)
{
freeMem(pp,numarray);
}
system("pause");
return 0;
}
相关文章推荐
- 【第十二篇】微信支付(APP)集成时碰到的问题(.net提示“无权限”、iOS跳转到微信支付页面中间只有一个“确定”按钮)(转)
- localStorage, localforage, web sql三者的比较
- usaco Barn Repair
- 【算法】三角形最小路径债务
- platform_device与platform_driver
- 树莓派安装pidora (Fedora Remix)详细教程 及一系列设置
- CentOS 基于Confluence-5.2.5搭建wiki知识库
- Mapped Statements collection already contains value for
- #ifndef 与 #program once 的区别 和注意点
- Sqlite 数据库存储
- JAX-RS @QueryParam example
- Leetcode: Happy Number
- MySQL中利用外键实现级联删除、更新
- C# PPT 为形状设置三维效果
- iOS 网易彩票-1框架搭建
- 三、 数据模型概念
- Job流程:Mapper类分析
- C#通过反射获取上层调用方法信息
- Google软件测试之道
- C# TreeView+checkBox 自动加载