首页 新闻 会员 周边

C++ 动态字符数组的问题

0
悬赏园豆:50 [待解决问题]

现在有这个一个函数 :
int  show( char * address, int * i);
该函数的功能是: 分配一段连续的地址,而且长度为 i 。如果成功,返回0,否则返回1

现在问题是:事先不知道该返回的地址长度,如何定义实参传递过去呢?

// 先定义
char name[100] = { 0};
int   name_len = 0;

// 调用show函数
int iRet = show(name, &name_len);

这样就有个问题,name定义了100个,是在是太大了,很浪费。怎么定义name让其不浪费
很多内存呢? 

cghy2011的主页 cghy2011 | 初学一级 | 园豆:155
提问于:2012-03-24 23:09
< >
分享
所有回答(2)
0

你的这个说法让我有点不明白了,如果要动态分配存储,像下面这样写就好了,在堆上申请存储,之后要注意存储释放。

int show(char* address,int length){ 

if(adress||length<=0) return 0;

address = new char[length];

return 1;


}

你写的那种方式在在栈上获取一片空间,怎么还成了动态分配?而且一个int,直接传递就好了,不用指针,又不是要在内部修改它。

zsounder | 园豆:2819 (老鸟四级) | 2012-03-24 23:31

不是实现show这个函数。show是一个给定的函数,你只需要调用这个函数就可以了。

问题是怎么调用?

支持(0) 反对(0) cghy2011 | 园豆:155 (初学一级) | 2012-03-24 23:34

@cghy2011: 怎么调用?show的作用是:分配一段连续的地址,而且长度为 i,你这里说的分配是什么意思?show是怎么实现的,是new的存储吗?如果是new的,就传递长度就好了!不明白你的问题到底是什么?

支持(0) 反对(0) zsounder | 园豆:2819 (老鸟四级) | 2012-03-24 23:46

@cghy2011: 

show的作用是分配一段连续的地址,而且长度为 i 。如果成功,返回0,否则返回1

你的内存是show分配的,为什么要说“事先不知道该返回的地址长度”,申请多少存储是你传递进去的 i 决定的,OMG,如果你的show使用的是placement new,那这个接口的设计者可以拉出去毙了。如果不是placement new,你说的这个问题根本就是一个不存在的问题。OMG,OMG,OMG,这个简单的不是问题的问题让我火大,淡定。。。。

支持(0) 反对(0) zsounder | 园豆:2819 (老鸟四级) | 2012-03-25 15:59
0

你可以考虑用链表把数据一个一个连起来,但是不符合你的数组的空间是连续。
我不知道是不是你自己理解题目理解错了
这里 我讲下自己的意见,可能有不对,首先你要连续的空间,那就用数组,而且数组定义有个规定,就是知道大小。
但是如果你说的动态增长的,那就用链表,链表的基本思想是这样的:
首先我们不知道我们到底有多长的数据,所有我们当我们需要一个数据就向系统中的内存要一块,但是在申请内存的时候我们不一定都能得到内存(就向你问你父母要钱,并不是每次都会给你,只有有的时候才给你),这里稍作一下判断是否申请成功,链表又分单向链表和双向链表,具体情况要根据自己的需求。
我觉得你的题目用链表比较好……
如果不懂链表 多看看网上的代码 或者给我留言我给你资料
希望对你有帮助

唯吴独尊 | 园豆:707 (小虾三级) | 2012-03-24 23:43

原  型:

int _stdcall GetPeopleName(char *strTmp, int *strLen)     //得到姓名信息

说 明:得到身份证的姓名。

参数:

       *strTmp   返回的信息缓存指针。

       *strLen    返回的信息长度指针。

返 回 值:0 : success  , 1 - fail

===============================================

上面是这个函数的定义。

我该怎么使用这个函数呢?

支持(0) 反对(0) cghy2011 | 园豆:155 (初学一级) | 2012-03-24 23:51

@cghy2011: 你是需要调用这个函数还是实现这个函数
如果需要调用这个函数 那就给他一个数组的地址和int类型的地址
比如说我定义 char a[]={'a','b','c'}; int num = 3;
int _stdcall GetPeopleName(a,&num);
如果是实现的话 就后面的那个 取地址的值就可以了

支持(0) 反对(0) 唯吴独尊 | 园豆:707 (小虾三级) | 2012-03-25 00:00

@唯吴独尊: 
是调用这个函数。
主要是不知道 数组 a 的长度 num 是多少

支持(0) 反对(0) cghy2011 | 园豆:155 (初学一级) | 2012-03-25 14:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册