c++ SENTRY32.dwSize和sizeof

sxissh06  于 2023-11-19  发布在  其他
关注(0)|答案(3)|浏览(164)

我读了这两个关于这些“函数”的解释,虽然它们看起来是一样的,但它们并不输出相同的值:
dwSize:
结构的大小(以字节为单位)。
尺寸:
“sizeof(x)返回变量或类型x占用的内存量(以字节为单位)”
我的代码:

PROCESSENTRY32 entry;
cout >> entry.dwSize >> endl;
cout >> sizeof(entry) >> endl;

字符串
为什么entry.dwSizesizeof(entry)在打印时不产生相同的值?根据上面的描述,它们都应该给予我以字节为单位的条目大小。

jmp7cifd

jmp7cifd1#

关于MSDN Documentation for PROCESSENTRY32
dwSize
结构的大小,以字节为单位。在调用Process32First函数之前,请将此成员设置为sizeof(SENTRY32)。如果不初始化dwSize,Process32First将失败。
所以dwSize应该等于sizeof(PROCESSENTRY32),但是创建一个struct并不会初始化它的成员,所以在你设置它们之前,所有的成员都会有垃圾。

rryofs0p

rryofs0p2#

当你创建一个结构体时,它要么是用0字节初始化,要么是随机初始化。当你查看docs时,你会发现在使用它之前你必须自己填充dwSize。

0yycz8jy

0yycz8jy3#

你混淆了两个完全无关的东西。PROCESSENTRY32::dwSize是一个数据字段,* 你 * 应该初始化为接收方PROCESSENTRY32结构的大小。你有责任将它设置为正确的值。它不会神奇地自己设置。
也就是说,你应该

PROCESSENTRY32 entry;
entry.dwSize = sizeof entry;
...

字符串
在尝试将entry传递给任何WinAPI函数之前。
这就是文档中dwSize是“结构的大小,以字节为单位”的意思。

相关问题