69,369
社区成员
发帖
与我相关
我的任务
分享
main()
{
char *buf;
que_msgA *msgA;
que_msgB *msgB;
buf = NULL;
msgA = NULL;
msgB = NULL;
get_msg_que((void**) &buf);
/*
* 这里判断的是第一个字节,而不是第一 int
*/
// if(*buf == 1){
/*
* 改成这样
*/
if(*((int*)buf) == 1){
msgA = (que_msgA *)buf;
....
}
// else if(*buf == 2){
else if(*((int*)buf) == 2){
msgB = (que_msgB *)buf;
....
}
}
que_msgA * p_que_msgA = NULL;
que_msgB * p_que_msgB = NULL;
MSG * pMSG = (MSG*)malloc(sizeof(MSG)); // guess
get_msg_que((void**)(&pMSG));
if(((que_msgA*)pMSG)->msg_id == 2)
p_que_msgB = (que_msgB*)pMSG;
if(((que_msgB*)pMSG)->msg_id == 1)
p_que_msgA = (que_msgB*)pMSG;
void main(void){
//未必使用union,只是这样描述更清楚一些
union {
void * msg_ptr;
int * msg_type;
que_msgA * msg_atype;
que_msgB * msg_btype;
}msgptr;
//....
get_msg_que(&msgptr.msg_ptr);
if(*msgptr.msg_type == 1){
//que_msgA
//......
}else if(*msg.msg_type = 2){
//que_msgB
//......
}
//.....
}