请教数组做参数的问题,新人第一次发帖 - 0 -

ZChameleon 2014-07-21 09:04:06
我自己写了一个读取字节数组型内存的函数,但效果与正常情况有偏差。

函数是这样的:
DWORD SuperReadMemory(HANDLE hProcess, DWORD BaseAddress, BYTE *BaseValueByte, int OffsetNum, ...)
{
DWORD BaseValue;
va_list ap;
va_start(ap, OffsetNum);
for (int i = 0; i < OffsetNum; i++)
{
ReadProcessMemory(hProcess, (void*)BaseAddress, &BaseValue, sizeof(BaseValue), NULL);
BaseAddress = BaseValue + va_arg(ap, int);
}
va_end(ap);
ReadProcessMemory(hProcess, (void*)BaseAddress, BaseValueByte, sizeof(BaseValueByte), NULL);
return BaseAddress;
}


然后调用这个函数给字节数组BaseValueByte赋值:
SuperReadMemory(hprocess, BaseAddress, BaseValueByte, 2, Offset1, Offset2);


正确结果应该是:
88 2 0 0 30 0 0 0 106 6

可运行结果却是:
88 2 0 0 0 0 0 0 0 0

如果不用我写的函数而是直接循环调用ReadProcessMemory,就不会出错,请问这是为什么呢?
...全文
62 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZChameleon 2014-07-21
  • 打赏
  • 举报
回复
懂了懂了,谢谢楼上两位,果然高手,结贴
Intel0011 2014-07-21
  • 打赏
  • 举报
回复
数组做函数参数时,会退化成指向数组的指针,这时对其使用sizeof的结果是指针的大小,32位下为4,64位下为8
robertbo 2014-07-21
  • 打赏
  • 举报
回复
sizeof(BaseValueByte)有问题,读出来的是指针的长度,而不是数组的长度。数组名称作为指针变量的参数时,会被调用函数当做指针变量的。这块可以在函数外面用sizeof(BaseValueByte),然后用参数把长度传进来

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧