免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5406 | 回复: 6
打印 上一主题 下一主题

求助!关于C++结构体赋值问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-31 23:19 |只看该作者 |倒序浏览
5可用积分
头文件里定义结构体变量
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.
请问一下,我是不是初试化的时候哪里出现了问题,请帮忙解决一下,谢谢!

论坛徽章:
0
2 [报告]
发表于 2007-12-31 23:39 |只看该作者

回复 #1 zhouxb 的帖子

怎么没有说话呢,在线等!谢谢

论坛徽章:
0
3 [报告]
发表于 2007-12-31 23:48 |只看该作者

细心

我也调试过这样错误的程序,我可以告诉你我的几个错误

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

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

如果可以能否贴出代码的上下文。

论坛徽章:
0
4 [报告]
发表于 2007-12-31 23:52 |只看该作者
在VC上试了一下你的代码,结果是200啊
你确定你的index是3?

论坛徽章:
0
5 [报告]
发表于 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!能够得到结构,很奇怪的现象,不知道出错在哪里?

论坛徽章:
0
6 [报告]
发表于 2008-01-02 12:32 |只看该作者
结构体里哪个字节没有对齐?
我确定index是3的了,我放在PackJK里都能用的了,就是放在PackJK外面的话就使用不了了

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2008-01-02 13:47 |只看该作者
〉〉奇怪的是我把TRANS_DEF transdef_jk[16]定义成了全局变量
你到底定义在哪里?
能不能把整个框架都给说一下,
或者你写一个能重现你错误的简单的程序。
现在说得看着真迷糊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP