首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个复杂的结构数组(动态生成),怎样赋值呢?解决办法

2012-02-29 
一个复杂的结构数组(动态生成),怎样赋值呢?有一个结构定义如下:structfeanode{charfeaname[30]/*每个特性

一个复杂的结构数组(动态生成),怎样赋值呢?
有一个结构定义如下:

struct   feanode
{
char   feaname[30];/*   每个特性的名称   */
int   type;/*   每个特性的取值类型,0为字符型,1为整型,2为浮点型   */
union   range/*   每个特性的取值范围   */
{
char   *c_range[10];   /*   字符型   */
int   i_range[10];                   /*   整型   */
double     d_range[10];/*   浮点型   */
}range;
int   rangenum;/*   每个特性取值的数量   */
int   indegree;/*   每个特性的入度   */
struct   arcbox   *parent   ,   *child;     /*   分别指向该顶点第一条入弧和出弧   */
}feanode;

在初始化函数中,要动态生成一个该结构的数组,共有5个该结构的元素。这5个结构元素的取值如下:

"duration ",1,{0,1},2,0,NULL,NULL

"protocol_type ",0,{ "icmp ", "tcp ", "udp "},3,0,NULL,NULL

"serror_rate ",2,{0.0,0.3,0.9},3,0,NULL,NULL

"srv_serror_rate ",2,{0.0,0.5,0.8},3,0,NULL,NULL

"urgent ",1,{5,8},2,0,NULL,NULL

初始化函数如下:

void   init()
{
struct   feanode   *fealist;
fealist=(struct   feanode   *)malloc(5*sizeof(struct   feanode));
assert(fealist!=NULL);

下面该怎样赋值呢?要求能够在不用的时候释放掉。

}

请教大家,多谢了!

[解决办法]
只能够一个成员一个成员的赋值,没别的好办法

看了一下你的代码,里面有union结构,你确定你知道union结构应该怎么使用吗?知道里面数据

成员的存储原理?如果不知道,建议你换用struct。
[解决办法]
其实可以这样:
struct feanode fealist[5] =
{
{ "duration ",1,{NULL},2,0,NULL,NULL},
{ "protocol_type ",0,{NULL},3,0,NULL,NULL},
{ "serror_rate ",2,{NULL},3,0,NULL,NULL},
{ "srv_serror_rate ",2,{NULL},3,0,NULL,NULL},
{ "urgent ",1,{NULL},2,0,NULL,NULL},
}, *pfealist= fealist;
由于是动态分配内存,所以无需考虑是否释放内存的问题
如果结构体是个const,建议定义成全局变量
上述赋值对union初始化为NULL,因为在上述初始化过程是无法对union进行类型判断去赋值的
所以union部分还是需要根据类型去逐个赋值!

热点排行