标题:怎样在子函数里根据形参定义数组大小
只看楼主
OgarlicO
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-9-27
 问题点数:0 回复次数:6 
怎样在子函数里根据形参定义数组大小
我想编一个字符串处理函数实现得到一个字符串指定的某几位,int *mid(char *p,int star, int end),*p用于传递字符串首地址,star用于指定这个字符串要截取开始位,end用于指定结束位。
想在子函数内定义一个数组,数组的大小等于end-star+1,也就是大小不是一定的,然后把star和end之间的字符放到这个数组中,在把这个数组的首地址传出去。
问题是定义数组时必须指定数组大小,我应该怎样定义这个数组。
各位大小还有别的啥好方法不,能否告知一二。
搜索更多相关主题的帖子: star 字符串 
2011-09-27 22:41
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:0 
又是定义未知长度大小的数组  最好别这样用 顶一个MAX就可以了

但是如果你非要这样的话你就要用指针动态分配内存 但是需要你手动释放他

会降低你程序的安全性 容易产生野指针

                                         
===========深入<----------------->浅出============
2011-09-27 22:44
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:0 
回复 楼主 OgarlicO
不能在函数定义数组,再把数组首地址传出去,因为这样定义的数组是子函数的局部变量,是放在子函数的栈上,随着子函数返回栈也销亡了,你返回数组首地址是个非法的地址,会出问题的。就象2楼说的用malloc分配,也可以定义个全局数组

总有那身价贱的人给作业贴回复完整的代码
2011-09-27 23:12
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
得分:0 
回复 3楼 embed_xuel
楼主,应该是想用数组做形参

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-09-28 06:55
silent_world
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:258
专家分:1138
注 册:2011-9-24
得分:0 
回复 楼主 OgarlicO
在C函数中,不能在函数中定义数组返回,楼上已经回答了。
另外,也不建议在函数中申请内存:
1、内存释放可能出现疏忽;
2、在函数交叉重入时会造成操作复杂化,如频繁使用,会产生内存碎片;
函数调用前,知道需要字符串的首地址和尾地址,即知道大概长度,可以如下定义函数:
int mid(char *src, char *dnt, int star, int end)
添加一个输出参数,参数准确性由使用者自己控制,函数详细说明由定义者提供。
2011-09-28 09:56
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
现在很少人尝试自己管理内存了。以前在DOS时,实模式,自己管理内存还有现实可能性,因为独占系统,所有动作自己清楚,管理得当,不会造成太大麻烦。但在当今的操作系统下,都是多任务的虚拟模式,甚至还是操作系统抢先的内存管理,它什么时候挪动过数据你未必知道,是实内存还是虚拟内存你也未必知道,用以前经验教导你管理内存的方法来写内存管理程序,撞墙的可能性大得多。精力还是不要花在这方面的好。

[ 本帖最后由 TonyDeng 于 2011-9-28 10:13 编辑 ]

授人以渔,不授人以鱼。
2011-09-28 10:05
Kingslay
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-10-31
得分:0 
回复 6楼 TonyDeng
我在写矩阵拟三角化的程序时也想在函数里定义未知大小的数组,或者利用动态分配内存来定义数组,但是看楼上这么说,我也没有这想法了。想着不要太多的数组形参,使程序看起来简洁一点,但是实际上更麻烦了。
2012-10-31 13:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-351055-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.982766 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved