Chinaunix

标题: 求助!关于C++结构体赋值问题! [打印本页]

作者: zhouxb    时间: 2007-12-31 23:19
标题: 求助!关于C++结构体赋值问题!
头文件里定义结构体变量
typedef struct
{
      int   message_id;
      int   resp_message_id;
      char  proc_code[7];
     unsigned char  bit_map[16];
} TRANS_DEF;

public:
      TRANS_DEF transdef_jk[16];
在程序里初始化变量
static TRANS_DEF  transdef_jk[]=
{
/* 0 POS_LOGON  */ {820,830,"XXXXXX",{0x80,0x20,0x00,0x00,0x00,0x40,0x00,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
/* 1 PER_SETTLE */ {520,530,"000000",{0x80,0x20,0x00,0x00,0x00,0x41,0x40,0x10,0x00,0x78,0xD7,0x80,0x80,0x00,0x00,0x00}},
/* 2 INBLACK    */ {NULL},
/* 3 BALANCE    */ {200,210,"300000", {0x60,0x20,0x04,0xC0,0x30,0xC0,0x90,0x19}},
/* 4 SALE       */ {200,210,"000000", {0x30,0x20,0x04,0xC0,0x30,0xC0,0x90,0x19}},
/* 5 VOID       */ {200,210,"200000", {0x70,0x20,0x04,0xC0,0x3C,0xC0,0x90,0x19}},
/* 6 PREAUTH    */ {100,110,"030000", {0x30,0x20,0x04,0xC0,0x30,0xC0,0x90,0x19}},
/* 7 PREAUTHACT */ {200,210,"000000", {0x30,0x20,0x04,0xC0,0x3C,0xC0,0x90,0x19}},
/* 8 PREAUTHCEL */ {100,110,"200000", {0x30,0x20,0x04,0xC0,0x3C,0xC0,0x90,0x19}},
/* 9 AUTHACTCEL */ {200,210,"200000", {0x30,0x20,0x04,0xC0,0x3C,0xC0,0x90,0x19}},
/* 10 REVERSAL  */ {400,410,"XXXXXX", {0x30,0x20,0x00,0x00,0x02,0xC0,0x80,0x19}},
/* 11 BATCH_UP  */ {820,830,"XXXXXX", {0x80,0x20,0x00,0x00,0x00,0x41,0x00,0x10,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
/* 12 SETTLE_E  */ {820,830,"XXXXXX", {0x80,0x20,0x00,0x00,0x00,0x41,0x00,0x10,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
/* 13 POS_LOGOFF*/ {820,830,"XXXXXX", {0x80,0x20,0x00,0x00,0x00,0x40,0x00,0x10,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
/* 14 CANCEL    */ {220,230,"200000", {0x70,0x20,0x04,0xC0,0x3C,0xC0,0x90,0x19}},
/* 15 CHG_PWD   */ {820,830,"XXXXXX", {0x80,0x20,0x00,0x00,0x00,0x40,0x00,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}
};

在程序执行过程中当调用到初试值的时候

transdef_jk[index].message_id的值不等于200,而是等于一个很大的负值.
index的值是等于3.
请问一下,我是不是初试化的时候哪里出现了问题,请帮忙解决一下,谢谢!
作者: zhouxb    时间: 2007-12-31 23:39
标题: 回复 #1 zhouxb 的帖子
怎么没有说话呢,在线等!谢谢
作者: LoveForLinux    时间: 2007-12-31 23:48
标题: 细心
我也调试过这样错误的程序,我可以告诉你我的几个错误

1、结构体里面的字节没有对齐(4个字节进行对起)

2、自己粗心导致的(程序细节问题)

如果可以能否贴出代码的上下文。
作者: xujg    时间: 2007-12-31 23:52
在VC上试了一下你的代码,结果是200啊
你确定你的index是3?
作者: zhouxb    时间: 2008-01-02 11:48
是的,奇怪的是我把TRANS_DEF transdef_jk[16]定义成了全局变量
我的函数调用过程是这样的
void CNewSocket::OnSend(int nErrorCode)
{
ret=PackJK(&commstrc,m_szBuffer,512);//结构体的值在PackJK里面用.


}
如果我把结构体在OnSend里面赋值,在PackJK外面,那就会出现我刚开始说的情况,但如果在PackJK里面赋值就会transdef_jk[index].message_id的值等于200!能够得到结构,很奇怪的现象,不知道出错在哪里?
作者: zhouxb    时间: 2008-01-02 12:32
结构体里哪个字节没有对齐?
我确定index是3的了,我放在PackJK里都能用的了,就是放在PackJK外面的话就使用不了了
作者: lenovo    时间: 2008-01-02 13:47
〉〉奇怪的是我把TRANS_DEF transdef_jk[16]定义成了全局变量
你到底定义在哪里?
能不能把整个框架都给说一下,
或者你写一个能重现你错误的简单的程序。
现在说得看着真迷糊。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2