首页
社区
课程
招聘
[求助]C语言编写程序,参数传进函数后改变
发表于: 2014-3-4 14:52 4753

[求助]C语言编写程序,参数传进函数后改变

2014-3-4 14:52
4753
如题目所说,不知道有没有大神遇到过这种Bug

typedef struct  test
{
        DWORD a;
        DWORD b;
        ULARGE_INTEGER c;
        char d[MAX_PATH];
        char e[MAX_PATH];
        struct test*next;
}
将这个数据结构的几个成员分别作为参数传入一个函数
函数内部可以使用OutputDebugString查看参数,发现参数改变了?

求助

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
后面三个参数没有变化,主要是前面两个DWORD值改变了。

很奇怪的BUG

我怀疑是内存字节对齐的问题,所以我设置了#pragma  pack(4)  或者#pragma  pack(1)  
好像都一点用都没有。。。希望以前遇到过这种问题的大神给一点建议
2014-3-4 14:53
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
1 、函数实现 代码 。

2、 怎么个变化。
2014-3-4 15:06
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
BOOL InsertListTail(ULARGE_INTEGER a, DWORD b, DWORD c, char *d,  char *e)
{
        //OutputDebugString打印出参数发现变化
}

这个是函数的原型
2014-3-4 15:12
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
实现代码。  不叫做函数声明 。 实现 啊。  你output怎么调用 的也要贴啊。  多贴几条很累么。

具体怎么变的你也没贴啊。
2014-3-4 15:35
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
wsprintf(temp,L"insert Tail a:%lu\tb:%d\tc:%d\n",a,b,c);
OutputDebugString(temp);

在函数头部加上这句然后在dbgview里面观察。。。
2014-3-4 16:13
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这个跟你前面的ularge有关系 。不能使用%lu

large  本身是占了两个DWORD的。
2014-3-4 16:39
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这个我知道,large是两个结构,所以我用%lu,l表示long,u表示无符号。。。感觉这个应该没什么特别大问题吧?
2014-3-4 16:52
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我刚才重新调试了下,果然如你所说,不将large的这个打印出来确实是正确的。。。但是如果我想要将large64位整数输入到文件或者字符串中应该使用哪个格式化输出字符呢??
2014-3-4 17:00
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
。。。 ularge是两个 dword 一个dword 就是unsiged long了。
2014-3-4 17:00
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
好吧!我试过%llu了,是可以的,之前使用ll的时候一个编译错误让我误以为应该就只用lu了。。谢谢了。。。
2014-3-4 17:04
0
游客
登录 | 注册 方可回帖
返回
//