enum type{tA,tB};
struct a{
char *a1;
int a2;
int a3;
};
struct b{
char *b1;
float b2;
};
union c{
a c1;
b c2;
};
struct d{
int d1;
c d2;
tpye d3;
}
//----我这样写代码,下
void xyz(a value,type tvlue)
{
d *m;
if((m=(d *)malloc(sizeof(d)))==NULL)//尤其是这里对吗??
{
printf("内存分陪错误!")
return 0;
}
switch(tvlue)
{
case tA:
memcpy(m->d2.c1,value,sizeof(m->d2.c1));//尤其是这里对吗??
break;
case tB:
memcpy(m->d2.c2,value,sizeof(m->d2.c2));//尤其是这里对吗??
break;
}
}
main(...)
{
...
a h;type k;
h.a1=100;
h.a2="hello";
h.a3=20;
k=tA;
xyz(h,k);
...
}
//我这样做对吗??????
struct a{
char *a1;
int a2;
int a3;
};
struct b{
char *b1;
float b2;
};
union c{
a c1;
b c2;
};
struct d{
int d1;
c d2;
tpye d3;
}
//----我这样写代码,下
void xyz(a value,type tvlue)
{
d *m;
if((m=(d *)malloc(sizeof(d)))==NULL)//尤其是这里对吗??
{
printf("内存分陪错误!")
return 0;
}
switch(tvlue)
{
case tA:
memcpy(m->d2.c1,value,sizeof(m->d2.c1));//尤其是这里对吗??
break;
case tB:
memcpy(m->d2.c2,value,sizeof(m->d2.c2));//尤其是这里对吗??
break;
}
}
main(...)
{
...
a h;type k;
h.a1=100;
h.a2="hello";
h.a3=20;
k=tA;
xyz(h,k);
...
}
//我这样做对吗??????
{
...
a h;type k;
h.a1="hello";
h.a2=100;//a2和a1的服值应该翻过来
h.a3=20;
k=tA;
xyz(h,k);
...
}
==这段肯定不行。sizeof(m->d2.c1)不是你想要的大小
int d1;
c d2;
type d3;
};//少了个分号
//----我这样写代码,下
void xyz(a value,type tvlue)
{
d *m;
if((m=(d *)malloc(sizeof(d)))==NULL)//一般没错
{
printf("内存分陪错误!");
return;//void不能返回0
}
switch(tvlue)
{
case tA:
memcpy(&m->d2.c1,&value,sizeof(m->d2.c1));//改为&
break;
case tB:
memcpy(&m->d2.c2,&value,sizeof(m->d2.c2));//改为&
break;
}
m->d3 = tvlue;//最好加上这行
}
value 类型为 a
c2 类类型为 b这样能得到你想要的值吗?如果在默认的对齐字节为8的情况,这样写还存在隐患