胡歌话剧如梦之梦2016:c的问题 大虾们帮忙啊(急4----------)

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/06 08:05:51
.h文件中是这样定义的
void aaa(struct s1 *, struct s2 *);
.c文件中要这样
yah_cns_msg(&e1,&e2);
其中e1是
struct s1 e1; //应该没问题的阿
而e2没有这样 //struct s2 e2;
而是这样的
struct
{
long xxx;
unsigned char yyy[20];
} e2; //怎么办啊
其中struct s2是这样的
struct s2
{
long xx;
unsigned char yy[1];
}
没别的方法吗
yah_cns_msg(&e1,(struct s2 *)&e2);
这样行不行啊???

真的就没有别的办法了吗

楼主,你想要有别的方法,那也你得把你最终目的给说出来呀.你不说明,我哪知道还有什么方法呀.我只能是按语法的要求去修正...

楼主,你后面补充的肯定不行。。。就算是e2类型按你的意思被转成s2了。。。但有二点是不可能通过的!

第一.e2还一样只是结构名而不是一个具有实体的变量!
第二.e2的结构总容量要比s2大得多。这样100%溢出!!

//---------------------------------------------

首先. 在s2和e2的说明里,它们不是同数型的(就要硬要把e2的类型强制赋给s2类型,其程序结果也肯定是错的,关键原因是:s2的结构容量要比e2的小...)

第二.在yah_cns_msg(&e1,&e2); 语句里&e1是正确的,但是&e2会语法出错。因为e2是一个结构体的变量名!

第三.按问题的情况看,解决问题的方法有两种,一.把e2和s2的定义反过来并多定义一个结构为e2的变量,如_e2,最后再通过强制类型转换来赋值!只是这样有意义吗? 二.使e2成为s2数据的一个变量! 则和e1一样的定义...我想,第二个方法才是你所需要的吧!

PS:指针类型的强制换转的结果是与你所用的编译器有关的。你想的并不一定是真的!但先做实验来验证。比如你补充的那句(struct s2 *)&e2在某些编译器里,可能根本就通不过,就算通过了,也不定是你想的把e2转成s2数型这样的理想结果...

e2的类型不是s2,是它声明的这个{... yyy[20];},所以无法运行
解决办法还是把e2声明的类型改成s2

s2不可能和e2在一起。。